新手obj-c问题。NSMutableArray快速枚举问题
我有一个自定义tableview与四个自定义单元格。在每个单元格中都有一个用于客户信息的可编辑文本框。我需要通过输入附件视图改善文本字段之间的切换。 http://uaimage.com/image/62f08045
我创建一个NSMutableArray与容量4.我标记文本字段和添加他们此数组中的文本字段的委托方法中:
- (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-了解决:
- 你为什么要textFieldShouldReturn设置你的textFieldsArray:?不应该在初始化完成的地方完成(例如视图控制器的viewDidLoad)?问题可能是您的数组从未实际设置,或者只是部分设置。另外,把这个设置放在这里意味着它会被反复调用,每次都会改变你的数组,并且搞砸了。
- 您的标签已关闭。你应该从0开始分配它们,而不是1(或者考虑到inputAccessoryViewDidSelectNext的不同)。如果您的代码正常工作,则会跳过2个文本字段,因为第一个字段会返回标记1,您会跳到objectAtIndex:2,这是第三个字段。
- 你不会考虑结束。如果你在最后一个领域,递增将不会回到开始。
我实际上建议不要使用标签。相反,在安装时,只需循环添加它们到数组中的字段即可。然后,在inputAccessoryViewDidSelectNext :,使用计数器而不是快速枚举来确定你在哪里。
1.不要分配或变异你正在枚举的对象,所以创建一个新的文本字段对象(当引用objectAtIndex时:textField.tag + 1) 2.尝试先退出当前文本字段的第一个响应者然后在第一响应者 – MCKapur
上进行下一步检查并确保已正确实例化textFieldArray并将其保留。使用NSLog来查看数组是否真的包含某些东西。 – Sandeep
insertObject:atIndex:可能是一个问题,我试图使用一次,没有工作......事实证明,在插入它之前你需要在该索引处已经有一个对象....所以尝试添加对象而不是像这个:addObject: – MCKapur