9

在我的 customCell 中使用 UItextField 时,以及当我 resignFirstResponder 文本字段时,我遇到了崩溃,但它不再可见(表格视图滚动出窗口)。我仍然可以找到文本字段,指针继续可访问,它不为空,并且崩溃仅发生在 IOS7 上,在 IOS6 上我没有这个问题。继承人一些代码:

textField一个全局变量。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString * CellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];

    TableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[TableCell alloc] init];

        if(indexPath.row == 0)
        {
            [textField setFrame:CGRectMake(15, 5, cell.frame.size.width-60, cell.frame.size.height)];
            textField.textAlignment = NSTextAlignmentLeft;
            [textField setBorderStyle:UITextBorderStyleNone];
            textField.textColor = [UIColor blackColor];
            textField.tag = indexPath.row;
            textField.delegate = self;
            textField.secureTextEntry = YES;
            [textField setFont:[UIFont fontWithName:@"Arial-BoldMT" size:15]];
            textField.textColor = [UIColor whiteColor];
            textField.returnKeyType = UIReturnKeyDone;
            [textField setAdjustsFontSizeToFitWidth:YES];
            textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
            textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Senha" attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
            [cell.contentView textField];
        }
}
    return cell;
}

-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
//    NSLog(@"text field %@",textField);
//    NSLog(@"tfield return: %d",textField.isFirstResponder);
    [textField resignFirstResponder];
//    [self.view endEditing:YES];

    return NO;
}
4

3 回答 3

9

在 Apple 的帮助下,我已经成功修复了一个类似的崩溃错误。关键是reuseIdentifer.

引用来自Apple Developer Technical Support的Vincent Gable的邮件:

这是一个已知的行为变化,发生在 iOS 7 中UITableView,当单元格未被重用时。

此处的修复是确保您遵循正确的单元重用。如果您不想重用UITableViewCells,那么建议您简单地将所有视图布局在一个UIScrollView.

为确保单元格被重复使用,请确保您传递的字符串与dequeueReusableCellWithIdentifier:用于制作单元格reuseIdentifier:时传递的字符串相同alloc/init。该字符串不能为 nil。

所以我认为你应该确保你设置TableCellreuseIdentifer属性与你传递给的值相同dequeueReusableCellWithIdentifier:

于 2013-10-24T02:51:05.003 回答
1

您需要对 UITableViews 的工作原理进行更多研究并重新考虑您的设计。将 UITextField 存储在全局变量中并尝试像这样定位它不是正确的方法。即使您可以解决眼前的问题,即 UITextField 可能已与 UITableViewCell 一起发布,但这种设计只会让您陷入更深的麻烦。

相反,考虑子类化 UITableViewCell 并将 UITextField 属性添加到您的子类。

您可能也不希望对每一行都使用不同的 CellIdentifier。

于 2013-10-01T16:51:38.460 回答
0

也许我已经解决了。这是一个有点肮脏的方法,但我认为它有效。我存储了 cellForRowAtIndexPath 创建的所有单元格

if (!cell) { cell = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"FormCell_%@",cellID] owner:nil options:nil] lastObject]; [self.allTheCell addObject:cell]; } 该应用程序不再在 ios7 上崩溃

于 2013-11-11T20:31:38.143 回答