新手 obj-c 问题。
我有一个带有四个自定义单元格的自定义表格视图。每个单元格中都有一个用于客户信息的可编辑文本字段。我需要通过输入附件视图改进文本字段之间的切换。 http://uaimage.com/image/62f08045
我创建了一个容量为 4 的 NSMutableArray。我标记了文本字段并将它们添加到文本字段委托方法中的此数组中:
- (BOOL) textFieldShouldReturn:(UITextField *)textField {
FDTextFieldCell *cell = (FDTextFieldCell *)[textField superview];
NSIndexPath *indexPath = [[self tableView] indexPathForCell:cell];
if ([indexPath section] == 0) {
if ([indexPath row] == 0) {
[[FDProfile sharedProfile] setName:[textField text]];
[textField setTag:1];
[textFieldsArray insertObject:textField atIndex:0];
} else if ([indexPath row] == 1) {
[[FDProfile sharedProfile] setSurname:[textField text]];
[textField setTag:2];
[textFieldsArray insertObject:textField atIndex:1];
} else if ([indexPath row] == 2) {
[[FDProfile sharedProfile] setNickname:[textField text]];
[textField setTag:3];
[textFieldsArray insertObject:textField atIndex:2];
} else if ([indexPath row] == 3) {
[[FDProfile sharedProfile] setEmail:[textField text]];
[textField setTag:4];
[textFieldsArray insertObject:textField atIndex:3];
[textField resignFirstResponder];
}
}
[[self tableView] reloadData];
return YES;
}
现在我尝试改进按钮“下一步”的功能:
- (void) inputAccessoryViewDidSelectNext:(FDInputAccessoryView *)view {
for (UITextField *textField in [self textFieldsArray]) {
if ([textField isFirstResponder]) {
textField = [[self textFieldsArray] objectAtIndex:textField.tag + 1];
[textField becomeFirstResponder];
}
}
}
但是这段代码不起作用。我认为使用快速枚举存在问题?
有人可以帮忙吗?谢谢,亚历克斯。
从 c-had 解决的一些想法:
- 为什么要在 textFieldShouldReturn: 中设置 textFieldsArray?这不应该在初始化完成的地方(例如视图控制器的viewDidLoad)完成吗?问题可能是您的阵列从未实际设置,或者只是部分设置。此外,将设置放在这里意味着它将被一遍又一遍地调用,每次都会改变你的数组并将事情搞砸。
- 你的标签少了一个。您应该从 0 开始分配它们,而不是 1(或考虑 inputAccessoryViewDidSelectNext 的差异:)。如果您的代码正常工作,它将跳过 2 个文本字段,因为第一个字段将返回标签 1,您将跳到 objectAtIndex:2,这是第三个字段。
- 你不考虑结束。如果您在最后一个字段,递增将不会回到开头。
我实际上建议根本不使用标签。相反,在设置时,只需遍历字段,将它们添加到您的数组中。然后,在 inputAccessoryViewDidSelectNext: 中,使用计数器而不是快速枚举来确定您的位置。