gpt4 book ai didi

ios - 当调用 textFieldDidEndEditing 时,应用程序卡住

转载 作者:行者123 更新时间:2023-11-28 21:48:29 31 4
gpt4 key购买 nike

我有一个自定义的 UITableView,里面有 UITextFields。在 cellForRow... 中,我将 textFields 委托(delegate)给了自己。 (在我的主要 VC 类中。)我从 textField 获取文本的方式是在 textFieldDidEndEditing 中,我将它添加到 mutableArray

然后我有不同的单元格 ID,这些单元格 ID 在选择按钮时添加:

- (IBAction)addRow:(id)sender
{
NSInteger row = [self.rowArray cound];
[self.rowArray insertObject:@"anotherCell" atIndex:row];

NSIndexPath *indexPath = [NSindexPath indexPathForRow:row inSection:0];
[self.myTableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
}

(cellID 中有一个textField,我将delegate 设置为self。)

textFieldDidEndEditing 中,我制作了 textField.textNSLog,当该方法从 textField 调用时code> 最初在那里,它按预期工作。

但是,当 textFieldDidEndEditing 从位于 anotherCell(添加的单元格)单元格中的 textField 调用时,整个模拟器会卡住。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellID = [self.rowArray objectAtIndex:[indexPath row]];

customCell *cell = [tableView dequeuereusablecellwithidentifier:cellID forIndexPath:indexPath];

cell.name.delegate = self; // From cell that is initially there
cell.phoneNumber.delegate = self; // From the added cell

return cell;
}

(如果这令人困惑,或者如果您需要更多代码,请在评论中告诉我。谢谢)

编辑

- (void)textFieldDidEndEditing:(UITextField *)textField
{
if (textField.tag <= 9)
{
NSLog(@"%@", textField.text); // This works
}

UIView *superview = textField.superview;
while (![superview isMemberOfClass:[UITableViewCell class]]) {
superview = superview.superview;
}
CustomCellClass *cell = (CustomCellClass *)superview;
NSIndexPath *indexPath = [self.myTableView indexPathForCell:cell];

if (textField.tag >= 12)
{
if ([self.inputArray count] > indexPath.row) // So I won't get the error message of [__NSArrayM objectAtIndex:]: index 1 beyond bounds for empty array'
{
for (NSUInteger i = [self.inputArray count]; i < indexPath.row; i++) {
[self.inputArray insertObject:@"" atIndex:i];
NSLog(@"%lu", (unsigned long)i);
}
}

NSLog(@"%@", self.inputArray);
}
}

最佳答案

你的代码在这里陷入了无限循环:

while (![superview isMemberOfClass:[UITableViewCell class]]) {
superview = superview.superview;
}

因为 isMemberOfClass 只有当父 View 类是 UITableViewCell 时才会返回 true,但如果它是 UITableViewCell< 的子类则不会。如果将 isMemberOfClass 更改为 isKindOfClass,它应该可以工作。查看 Apple 文档 here .

关于ios - 当调用 textFieldDidEndEditing 时,应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29199639/

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