2011-07-24 65 views
1

这是操作keyboardWillShowNotification边缘情况

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];  
[nc addObserver:self 
     selector:@selector(keyboardWillShow:) 
      name:UIKeyboardWillShowNotification 
     object:nil]; 
[nc addObserver:self 
     selector:@selector(keyboardWillHide:) 
      name:UIKeyboardWillHideNotification 
     object:nil]; 

然后我添加文本框一个UITableViewCell的顺序一个问题:

[textField addTarget:self 
       action:@selector(textFieldBegin:) 
    forControlEvents:UIControlEventEditingDidBegin]; 

[cell addSubview:textField]; 

在textFieldBegin,我scrollToRowAtIndexPath移动到小区正在编辑。
在keyboardWillShow中,我调整了tableView的框架以允许使用键盘。
textFieldBegin被称为keyboardWillShow,所以第一次显示它没有空间来滚动。

是否有一种解决这种疏忽的方法?

回答

1

您可以在开始时将当前滚动位置存储在变量中,然后在keyboardwillshow通知中,您可以重新滚动到存储在该变量中的任何位置。

我认为这可以让你保持你的不同动画属于他们。

0

而是倾听的UIKeyboardWillShowNotification你可以到UITextFieldDelegate方法textFieldDidBeginEditing:反应和调整/滚动在该方法中,因为它被称为显示键盘后。

+0

由于iOS 4.0(我认为),这不再是事实。在iOS 3.0中,我认为textFieldDidBeginEditing:仅在键盘完全出现后才发生,这看起来很愚蠢。 –