这是操作顺序的问题
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 之前被调用,因此第一次显示它时无法滚动。
是否有一种解决这种疏忽的方法?
答案 0 :(得分:1)
您可以在开始时将当前滚动位置存储在变量中,然后在keyboardwillshow通知中,您可以重新滚动到该变量中存储的任何位置。
我认为这样可以让您将不同的动画保留在他们所属的位置。
答案 1 :(得分:0)
不是监听UIKeyboardWillShowNotification
,而是可以对UITextFieldDelegate方法textFieldDidBeginEditing:
作出反应,并在该方法中调整大小/滚动,因为在之后显示键盘。