以下是用户界面: 我有一个包含文本字段的行的表视图。例如,row1具有textField1,而row2具有textField2。
现在,如果用户点击textField1,一切正常。代表被召唤和一切。
然后,如果用户点击textField2,则只为textField1调用textFieldDidEndEditing:
。不为textField2调用textFieldDidBeginEditing:
(我很确定textField2委托已设置,因为当我再次点击textField2时,它会开始编辑(现在调用textFieldDidBeginEditing:
)
您可能认为这不是一个真正的问题。问题是iOS不断显示键盘!没有与之关联的文本字段!我甚至循环到所有可见行中的所有文本字段,并在没有运气的情况下重新签名。
似乎是iOS中的错误,对吧?
编辑:以下是代理
中的代码 - (void) textFieldDidBeginEditing:(UITextField *)textField {
[self fixTableViewOffsets];
RSMCellEditPricesCell *cell = (RSMCellEditPricesCell *) [[textField superview] superview];
[self.tableView scrollToRowAtIndexPath:[self.tableView indexPathForCell:cell]
atScrollPosition:UITableViewScrollPositionTop
animated:YES];
}
- (void) textFieldDidEndEditing:(UITextField *)textField {
self.currentPriceTextField = nil;
[self fixTableViewOffsets];
[self.tableView reloadData];
}
答案 0 :(得分:0)
首先,如果要在变量末尾添加label
,请注意命名约定,该变量应为UILabel
而不是UITextField
。第二个问题可能出在textFieldDidEndEditing
方法中,您在所有文本字段上调用resignFirstResponder
(如果cell.priceLabel是文本字段)。您不应在resignFirstResponder
或textFieldDidEndEditing
中致电textFieldSouldReturn
,因为如果调用这些方法,则文字字段已经作为第一响应者辞职。
答案 1 :(得分:0)
我找不到它的修复方法。但是,作为解决方法,我禁用了第二个文本字段。当用户点击该字段时,它将触发单元格上的触摸事件,而不是将解除键盘的文本字段。然后,我启用所有文本字段,用户可以再次选择第二个文本字段。
这不是一个解决方案,它不提供最好的用户体验。它仍然有效。