我的UITableViewCell
中有一个UITextField
。此单元格包含最多3位数字符串,我可以编辑。到目前为止一切都那么好;)现在我已经在键盘上的UIToolbar
上创建了上一个和下一个按钮,该按钮也可以正确显示。
现在我要做下一个实现:
- (void) didPressNext:(Cell *)cell
{
NSIndexPath *indexPath = [_tableView indexPathForCell:cell];
NSInteger maxRows = [_tableView numberOfRowsInSection:indexPath.section];
NSInteger maxSections = [_tableView numberOfSections];
if (maxRows > (indexPath.row + 1)) { //In the same section
NSIndexPath *next = [NSIndexPath indexPathForItem:indexPath.row + 1 inSection:indexPath.section];
Cell * nextCell = (Cell *)[_tableView cellForRowAtIndexPath:next];
[_tableView scrollToRowAtIndexPath:next atScrollPosition:UITableViewScrollPositionBottom animated:NO];
[nextCell becomeFirstResponder];
} else if (maxSections > (indexPath.section + 1)) { //Is there a next section
maxRows = [_tableView numberOfRowsInSection:indexPath.section + 1];
if (maxRows != 0) { //If there are any
NSIndexPath *next = [NSIndexPath indexPathForItem:0 inSection:indexPath.section + 1];
Cell * nextCell = (Cell *)[_tableView cellForRowAtIndexPath:next];
if (nextCell.shirtNumber && !nextCell.shirtNumber.hidden) { //Contains a shirtNumber?
[_tableView scrollToRowAtIndexPath:next atScrollPosition:UITableViewScrollPositionBottom animated:NO];
[nextCell becomeFirstResponder];
}
}
}
}
在我的单元格中,我覆盖了这些方法:
- (BOOL) canBecomeFirstResponder{
return YES;
}
- (BOOL) isFirstResponder
{
return [_shirtNumber isFirstResponder];
}
- (BOOL) becomeFirstResponder
{
return [_shirtNumber becomeFirstResponder];
}
- (BOOL) resignFirstResponder
{
return [_shirtNumber resignFirstResponder];
}
这个过程在某些时候正常工作,有时当我按两次时。动画总是有效,所以我知道我正确计算了下一个indexPath。
我在这里做错了什么?
问题是:"为什么有时候第一个响应者没有工作并且没有返回"
答案 0 :(得分:0)
在第一个结尾,如果你得到[nextCell becomeFirstResponder];
显然细胞不能成为第一反应者。
应该是[nextCell.shirtNumber becomeFirstResponder];