我有一个带有表单输入屏幕的iPhone应用程序。我通过制作具有UITableViewCell
和UILabel
的自定义UITextfield
来完成此操作。我进行了设置,以便“cellForRowAtIndexPath”从Core Data中获取适当的值,UITextField's
“textFieldDidEndEditing”方法将适当的值保存到Core Data。它的效果很好......除了:
如果我编辑文本字段,然后将其滚出屏幕,然后单击另一个单元格的文本字段:
我完全理解这个问题,我只是不确定解决问题的最佳方法。我的第一个想法是将“textFieldDidEndEditing”中的逻辑添加到“dealloc”,但这看起来很糟糕。有什么建议?
答案 0 :(得分:2)
我最终使用了一个用于滚动视图的委托方法(内置于UITableView中)。当用户开始拖动时,我辞职第一响应者。
这很好用,因为它看起来不错,当用户开始滚动时会调用“textFieldDidEndEditing”,这总是在文本字段离开屏幕之前。
答案 1 :(得分:1)
这是你可以做的事情。在我看来,最好在编辑时禁用滚动因为用户没有必要,所以要确保他也不能这样做。限制用户可以执行的操作,使其更“安全”并更易于用户使用。
如果您不确定这些事情只是看看苹果做了什么,他们总是在他们的应用程序中。就像在iOS 5上的设置应用程序中一样,当您更改手机的名称时。你只需在下一个tableview中获得1行,这样就不会像用户那样弄乱任何东西..
答案 2 :(得分:0)
在自定义单元格的dealloc中,将textfield的委托设置为nil
答案 3 :(得分:0)
我有一个类似的问题......问题在于可重用的单元格作为表格视图的一部分。每次滚动表时,都会调用cellforRowatIndexPath,并使单元格出列并返回它。遗憾的是,此功能对于具有可保留数据(如标签)的单元格无效。因此,您必须选择自己的单元格出列方法。
我有一个名为cells的NSMutableArray,它可以保存我的所有单元格。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = [self dequeuwReusableCellwith:indexPath];
if (cell == nil)
{
cell = [[CustomTableViewCell alloc] init];
[cells addObject:cell];
}
// Configure the cell.
NSString *temp = [NSString stringWithFormat:@"Cell %d",indexPath.row];
cell.textField.placeholder=temp;
return cell;
}
这是我自定义deque可重用单元格的方法。
-(CustomTableViewCell*)dequeuwReusableCellwith:(NSIndexPath*)indexpath
{
if([cells count]>indexpath.row)
{
return [cells objectAtIndex:indexpath.row];
}
return nil;
}
希望这会有所帮助......