我有一个ViewController,添加了分组的tableview。某些单元格包含文本字段。当用户按下返回键时,我想将第一个响应者切换到单元格列表中的下一个文本字段。但是,我无法让它工作,我无法判断是否选择了不正确的单元格或选择了不正确的文本字段。
我正在使用以下内容在cellForRowAtIndexPath中设置我的标签..
cell.tag = ((indexPath.section + 1) * 10) + indexPath.row;
这将创建一个标签,其中十位是一个区段值,而那些位置是行值。即。标签11是第0行第1行。
这是我的textFieldShould返回的代码
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
UITableViewCell *cell = (UITableViewCell *)textField.superview;
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
cell = [self tableView:_tableView cellForRowAtIndexPath:indexPath];
if (indexPath.section == 0)
{
if (indexPath.row == 0)
{
[[cell viewWithTag:((indexPath.section + 1) * 10) + (indexPath.row + 1)] becomeFirstResponder];
}
if (indexPath.row == 1)
{
[[cell viewWithTag:((indexPath.section + 2) * 10)] becomeFirstResponder];
}
}
return YES;
}
最后要注意的是,目前新标签的增量是硬编码的,但我希望能够在没有每次硬编码实际值的情况下转到新标签。这可能吗?
答案 0 :(得分:3)
如果你的所有单元格都包含1个UITextField,我会说你可以继承UITableViewCell并添加一个引用单元格文本字段like I did here的属性。
但是你说只有你的一些单元格包含一个文本字段,所以另一种选择是创建一个指向UITextFields的指针数组(我得到了here的想法)。然后用户按下Return将循环显示它们:
- (BOOL) textFieldShouldReturn:(UITextField*)textField {
NSUInteger currentIndex = [arrayOfTextFields indexOfObject:textField] ;
if ( currentIndex < arrayOfTextFields.count ) {
UITextField* nextTextField = (UITextField*)arrayOfTextFields[currentIndex+1] ;
[nextTextField becomeFirstResponder] ;
}
else {
[textField resignFirstResponder] ;
}
}
答案 1 :(得分:1)
将标记设置为textField而不是单元格。
yourTextField.tag = ((indexPath.section + 1) * 10) + indexPath.row;