当键盘出现时,如何阻止tableView滚动?

时间:2014-03-17 05:35:46

标签: ios objective-c uitableview uikeyboard

我有一个UITableViewController,每个都包含位于每个单元格顶部的UITextView的单元格。 当然,当与textBox的交互开始时,键盘将会出现,同时整个表格也会在键盘出现时向上滚动,导致textBox不在视野范围内。

因为我已经为我的tableView启用了分页,所以在向上滚动之后它会再次向下滚动以便textBox在视图中。

我想知道是否可以在键盘出现时禁用滚动表,如果是,如何?

2 个答案:

答案 0 :(得分:2)

我们可以通过多种方式禁用tableview滚动。

1)在textView委托方法

- (void)textViewDidBeginEditing:(UITextView *)textView{
           tableView.scrollEnabled = NO;
}


- (void)textViewDidEndEditing:(UITextView *)textView{
 tableView.scrollEnabled = YES;
}

2)键盘通知

- (void)viewWillAppear:(BOOL)animated{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) 
                                             name:UIKeyboardWillShowNotification object:self.view.window];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
                                             name:UIKeyboardWillHideNotification object:self.view.window];
}

- (void)viewWillDisappear:(BOOL)animated {
    // unregister for keyboard notifications while not visible.
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil];}

- (void)keyboardWillShow:(NSNotification *)notif {
    tableView.scrollEnabled = NO;
}

- (void)keyboardWillHide:(NSNotification *)notif {
    tableView.scrollEnabled = YES;
}

答案 1 :(得分:2)

autoscroll-behavior位于UITableViewCONTROLLER功能中。要禁用自动滚动,我发现了两种方法:

1)使用UITableViewController而不是UITiewController - 自己设置数据源和委托

2)覆盖viewWillAppear-Routine - 并且不要调用[super viewWillAppear:animated] 使用这两种解决方案,您不仅可以禁用Autoscroll,还可以禁用其他一些很好但不是

基本功能,在Apple的课程参考概述中描述:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewController_Class/Reference/Reference.html