gpt4 book ai didi

iphone - NSMutableArray 快速枚举问题

转载 作者:行者123 更新时间:2023-12-01 17:58:45 24 4
gpt4 key购买 nike

新手 obj-c 问题。

我有一个带有四个自定义单元格的自定义表格 View 。每个单元格中都有一个用于客户信息的可编辑文本字段。我需要通过输入附件 View 改进文本字段之间的切换。
http://uaimage.com/image/62f08045

我创建了一个容量为 4 的 NSMutableArray。我标记了文本字段并将它们添加到文本字段委托(delegate)方法中的此数组中:

- (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?这不应该在初始化完成的地方(例如 View Controller 的 viewDidLoad)完成吗?问题可能是您的阵列从未实际设置,或者只是部分设置。此外,将设置放在这里意味着它将被一遍又一遍地调用,每次都会改变你的数组并将事情搞砸。
  • 你的标签少了一个。您应该从 0 开始分配它们,而不是 1(或考虑 inputAccessoryViewDidSelectNext 的差异:)。如果您的代码正常工作,它将跳过 2 个文本字段,因为第一个字段将返回标签 1,您将跳到 objectAtIndex:2,这是第三个字段。
  • 你不考虑结束。如果您在最后一个字段,递增将不会回到开头。

  • 我实际上建议根本不使用标签。相反,在设置时,只需遍历字段,将它们添加到您的数组中。然后,在 inputAccessoryViewDidSelectNext: 中,使用计数器而不是快速枚举来确定您的位置。

    最佳答案

  • 为什么要设置 textFieldsArraytextFieldShouldReturn: ?这不应该在初始化完成的地方完成吗(例如 View Controller 的viewDidLoad)?问题可能是您的阵列从未实际设置,或者只是部分设置。此外,将设置放在这里意味着它将被一遍又一遍地调用,每次都会改变你的数组并将事情搞砸。
  • 你的标签少了一个。您应该从 0 而不是 1 开始分配它们(或考虑 inputAccessoryViewDidSelectNext: 的差异)。如果您的代码正常工作,它将跳过 2 个文本字段,因为第一个字段将返回标签 1,您将跳到 objectAtIndex:2,这是第三个字段。
  • 你不考虑结束。如果您在最后一个字段,递增将不会回到开头。

  • 我实际上建议根本不使用标签。相反,在设置时,只需遍历字段,将它们添加到您的数组中。然后,在 inputAccessoryViewDidSelectNext: ,使用计数器而不是快速枚举来确定您的位置。

    关于iphone - NSMutableArray 快速枚举问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197227/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com