2010-03-12 1 views
1

iPhone 응용 프로그램에서는 표준 키보드처럼 작동하는 사용자 정의 키보드가 있습니다. 사용자 지정 텍스트 필드가 첫 번째 응답자가되고 필드가 첫 번째 응답자를 사임하면 숨겨집니다. 다음과 같이 또한, 일반 UIKeyboardWillShowNotification, UIKeyboardDidShowNotification과 숨어있는 대응을 게시하도록하겠습니다 :사용자 정의 키보드 (iPhone), UIKeyboardDidShowNotification 및 UITableViewController

NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:5]; 
[userInfo setObject:[NSValue valueWithCGPoint:self.center] 
      forKey:UIKeyboardCenterBeginUserInfoKey]; 
[userInfo setObject:[NSValue valueWithCGPoint:shownCenter] 
      forKey:UIKeyboardCenterEndUserInfoKey]; 
[userInfo setObject:[NSValue valueWithCGRect:self.bounds] 
      forKey:UIKeyboardBoundsUserInfoKey]; 
[userInfo setObject:[NSNumber numberWithInt:UIViewAnimationCurveEaseOut] 
      forKey:UIKeyboardAnimationCurveUserInfoKey]; 
[userInfo setObject:[NSNumber numberWithDouble:thisAnimDuration] 
      forKey:UIKeyboardAnimationDurationUserInfoKey]; 

[[NSNotificationCenter defaultCenter] postNotificationName:UIKeyboardWillShowNotification 
                object:nil 
                userInfo:userInfo]; 

을이 코드가 작동하고 나는 UIViewController 서브 클래스에서 사용.

이제 iPhone OS 3.0 이후로 UITableViewController은 시스템 키보드가 표시되거나 숨겨지면 자동으로 tableView의 크기를 조정합니다. 현재 3.0에 대해 컴파일 중입니다. 동일한 통보를 게시 할 때부터 내 사용자 지정 키보드가 나타나면 컨트롤러에서 테이블의 크기를 조정해야한다고 생각했습니다. 그러나 그렇지 않습니다. 테이블 뷰 컨트롤러는 입력 필드의 대리자로 설정됩니다.

왜 이것이 사실 일지 모르는 사람이 있습니까? 누구든지 비슷한 무언가를 성공적으로 구현 했습니까?

나는 사용자 정의 필드에 표준 입력 필드가 있으므로 사용자가 필드를 변경하면 표준 키보드가 숨겨지고 사용자 정의 필드가 표시됩니다. tableView 전체 높이로 크기가 조정되지 않은 및 사용자 지정 메서드를 사용하여 다시 크기를 조정할 필요가 않았다면 유용 할 것입니다.

답변

0

그럼 당신은 주변에서 찌를 당신의 설명에서 몇 가지 가능성이있다, jQuery과가 아닌 것 같다 당신의 viewDidLoad에서

UIKeyboard 알림을 사용하여.

하지만 아마도이 알림 (또는 UITabBarController)에 응답하는 것은 UINavigationController입니다.

setFrame : drawRect : 및 setNeedsDisplay와 같은 메서드를 tableview에 재정 의하여 호출 스택에서 어떤 일이 발생하는지 확인할 수 있습니다. 실제로 테이블 뷰를 올바른 크기로 다시 그리게 만드는 원인을 파악할 수 있습니다.

하지만 대부분의 경우 tableView의 크기를 변경하는 것이 훨씬 쉬운 방법입니다. 이 제안은 단지 재미를위한 것입니다!

+0

그래,이게 내가 해결책을 찾기 위해해야 ​​할 일이라고 생각한다. (현재 길 위에있다.) 내가 뭔가를 찾지 못한다면 나는 그것을 수동으로 해결할 것이다. 내가 너에게 그 현상금을 보상하겠다는 뜻. :) – Pascal

0

나는 비슷한 것을했습니다. 만약 내가 기억한다면 TableViewController를 보내거나 시스템이 전송하는 알림에 하위 카테시를 붙인 다음 테이블 뷰의 프레임에 변경 내용을 적용합니다. 아마 내부적으로 비슷한 일을하고 있을지도 모르겠지만, 최종 결과는 시스템이 알림을 게시 할 때 둘 다 실행되는 두 개의 애니메이션 블록이 될 것입니다. 그러나 최종 결과는 동일해야합니다.

[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(keyboardWillShow:) 
              name: UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(keyboardDidShowOrHide:) 
              name: UIKeyboardDidShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(keyboardWillHide:) 
              name: UIKeyboardWillHidewNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver: self 
             selector: @selector(keyboardDidShowOrHide:) 
              name: UIKeyboardDidHideNotification object:nil]; 

와 뷰 컨트롤러에서 :.

-(void) keyboardWillShow:(id)sender { 
    [UIView beginAnimations]; 
    [UIView setAnimationDuration:0.3]; 
    self.view.frame = //Your new size 
} 

-(void) keyboardDidShowOrHide:(id)sender { 
    [UIView commitAnimations]; 
} 

-(void) keyboardWillHide:(id)sender { 
    [UIView beginAnimations]; 
    [UIView setAnimationDuration:0.3]; 
    self.view.frame = //Your old size 
} 
+0

그건 내 사용자 지정보기 컨트롤러에서 어떻게하는지, 나는 이것을 피하고'UITableViewController'의 표준 메커니즘에 연결하고 싶었습니다. BTW, keyboardDidShowOrHide :?가 될 때까지 애니메이션을 실행하는 것을 기다리는 특별한 이유가 있습니까? – Pascal

+0

솔직히, 나는 왜 내가 기다렸는지 확신 할 수 없다. 나는 그 당시 그 이유를 모호하게 기억하고 있었다. 그러나 나는 2 년 전에이 코드를 썼다. 그리고 그때의 어떤 이유가 더 이상 적절하지 않을 수도있다. 나는 UITAbleViewController가 현재 사용하고있는 표준 메카니즘이 문서화되지 않은 무언가에 대한 메소드 호출을 필요로한다는 몰래 의혹을 가지고있다.이 메쏘드는이 플랫폼에서 작업 할 때 항상 고통 스러울 수있다. –

+0

아, 맞아, OS2.x는 여기 저기에 많은 해킹이 필요했습니다. :) – Pascal