我在使用UItextField时遇到崩溃,在我的customCell中,当我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;
}
答案 0 :(得分:9)
我已经在Apple的帮助下成功修复了类似的崩溃错误。关键是reuseIdentifer
。
报价来自 Apple Developer Technical Support Vincent Gable 的邮件:
这是在iOS 7中使用
UITableView
时发生的已知行为更改,此时不会重复使用单元格。此处的修复是为了确保您遵循正确的单元重用。如果您不想重复使用
UITableViewCells
,则建议您只需在UIScrollView
内布置所有观看次数。要确保重复使用单元格,请确保在使用
dequeueReusableCellWithIdentifier:
创建单元格时将相同的字符串传递给reuseIdentifier:
alloc/init
。这个字符串不能为零。
所以我认为您应该确保将TableCell
的{{1}}属性与您传递给reuseIdentifer
答案 1 :(得分:1)
您需要对UITableViews如何工作以及重新考虑您的设计进行更多研究。将UITextField存储在全局变量中并试图像这样定位它不是正确的方法。即使您可以解决即时问题,这可能是UITextField与UITableViewCell一起发布的,但这种设计只会让您陷入困境。
相反,请考虑继承UITableViewCell并将UITextField属性添加到子类中。
您可能不希望为每一行使用不同的CellIdentifier。
答案 2 :(得分:0)
也许我已经解决了。 这是一个有点脏的methot但我认为它的工作。 我存储了cellForRowAtIndexPath创建的所有单元格
if (!cell)
{
cell = [[[NSBundle mainBundle] loadNibNamed:[NSString stringWithFormat:@"FormCell_%@",cellID] owner:nil options:nil] lastObject];
[self.allTheCell addObject:cell];
}
该应用程序不再在ios7上崩溃