2012-09-15 5 views
1

나는 사용자가 테이블 아래쪽에 텍스트 필드 셀을 보여주는 편집 단추를 탭하도록함으로써 알림보기 응용 프로그램과 유사한 새 항목을 테이블보기에 추가하는 응용 프로그램을 가지고 있습니다. 나는 테이블에 많은 행이있을 때 키보드가 방해받지 않도록 테이블을 조정해야합니다. 나는 키보드가 표시 될 때의 알림에 가입하여이 일을하고있다 :여러보기에서 keyboardDidShow를 어떻게 처리합니까?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector (keyboardDidShow:) 
               name: UIKeyboardDidShowNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector (keyboardDidHide:) 
               name: UIKeyboardDidHideNotification 
               object:nil]; 
} 

... 
... 

-(void) keyboardDidShow: (NSNotification *)notif 
{ 
    // If keyboard is visible, return 
    if (self.keyboardVisible) 
    { 
     return; 
    } 

    // Get the size of the keyboard. 
    NSDictionary* info = [notif userInfo]; 
    NSValue* aValue = [info objectForKey:UIKeyboardFrameBeginUserInfoKey]; 
    CGSize keyboardSize = [aValue CGRectValue].size; 

    // Adjust the table view by the keyboards height. 
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0); 
    NSIndexPath *path = [NSIndexPath indexPathForRow:self.newsFeeds.count inSection:0]; 
    [self.tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    self.keyboardVisible = YES; 
} 

는 그러나, 나는 사용자가 행을 추가 할 수 있도록 테이블도 도청 될 수있는 새로운보기는 응용 프로그램에 푸시됩니다. 이 뷰에는 텍스트 뷰가 있으며 사용자가이 뷰를 탭하면 키보드에서 첫 번째 viewcontroller가 여전히 알림을 받음으로써 충돌이 발생합니다.

알림을 무시하거나 새로운보기를 눌러도 알림이 표시되지 않도록하려면 어떻게해야합니까?

+0

viewDidAppear에서 관찰자로 클래스를 추가하고 viewWillDisappear에서이를 제거 할 수 있습니다. – InsertWittyName

+0

나는 이전에 이름으로 제거를 시도했지만 예외가 발생했습니다. 이유는 확실하지 않지만 ... – lehn0058

+0

왜 이것이 작동하지 않는지 알았습니다. 실수로 [self viewWillDisappear : animated]라고 불렀습니다. 대신 [super viewWillDisappear : animated]; 나를 무한 루프로 만들었습니다. viewWillDisappear를 사용하면 완벽하게 작동합니다. – lehn0058

답변

1

viewDidAppear에서 관찰자로 클래스를 추가하고 viewWillDisappear에서이를 제거 할 수 있습니다.

관련 문제