1

組み込みの通知アプリと同様に、テーブルの下部にテキストフィールドセルを表示する編集ボタンをユーザーにタップさせることで、テーブルビューに新しいアイテムを追加するアプリがあります。キーボードが表示されているときにテーブルを調整して、テーブルに多くの行があるときに邪魔にならないようにする必要があります。キーボードが表示されたときの通知を購読することでこれを行っています:

- (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;
}

ただし、ユーザーに行を追加させたテーブルもタップでき、新しいビューがアプリにプッシュされます。このビューにはテキスト ビューもあり、ユーザーがそれをタップしてキーボードに表示されると、最初のビュー コントローラーが引き続き通知を受け取るため、クラッシュが発生します。

新しいビューがプッシュされたときに通知を無視するか、通知を起動しないようにするにはどうすればよいですか?

4

1 に答える 1

1

クラスをviewDidAppearでオブザーバーとして追加し、viewWillDisappearで削除できます。

于 2012-09-16T15:26:55.783 に答える