UITextField,用于定义UITableViewCell - 增加新细胞(UITextFie

2019-06-27 01:33发布

我想创建一个类似于在照相馆iPhone上的YouTube的视频上传视图中的表视图。

这里是基本的设置。

我有一个自定义的UITableViewCell创建了一个包含一个的UITextField。 显示在我的表细胞的伟大工程,我可以编辑,没有任何问题的文本。 我创建了一个事件挂钩,所以当文本的文本字段已经改变了,我可以查看。

[textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]

我想要做的就是这个。 当用户第一次编辑我要插入一个新的小区到当前小区下表视图中的文本(newIndexPath先于适当的位置计算):

[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom];
[self.tableView endUpdates];

问题是,当我运行单元格中插入代码创建单元,但文本字段的文本更新短暂,但随后的键盘驳回,文本字段重新设置为空字符串。

任何帮助都是极好的! 我已经一整天敲打我的头这一个。

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section
{
    if (section == 0)
        return 2;
    else
        return self.tags.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell = (SimpleTextFieldTableCell *)[tableView dequeueReusableCellWithIdentifier:tagCellIdentifier];

    if (cell == nil)
    {
        cell = [[[NSBundle mainBundle] loadNibNamed:@"SimpleTextFieldTableCell" owner:nil options:nil] lastObject];
    }

    ((SimpleTextFieldTableCell *)cell).textField.delegate = self;
    ((SimpleTextFieldTableCell *)cell).textField.tag = indexPath.row;
    ((SimpleTextFieldTableCell *)cell).textField.text = [self.tags objectAtIndex:indexPath.row];
    [((SimpleTextFieldTableCell *)cell).textField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

- (void)textFieldDidChange:(id)sender
{
    UITextField *textField = sender;

    [self.tags replaceObjectAtIndex:textField.tag withObject:textField.text];
    if (textField.text.length == 1)
    {
        [textField setNeedsDisplay];
        [self addTagsCell];
    }
}

- (void)addTagsCell
{
    NSString *newTag = @"";
    [self.tags addObject:newTag];

    NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:self.tags.count - 1 inSection:1];
    [self.tableView beginUpdates];
    [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationBottom];
    [self.tableView endUpdates];
}

Answer 1:

只有我能在这里想到的事情是,也许当你插入一行整个表视图重新加载,如果你没有正确添加您的细胞到细胞的队列,他们不会回来,他们的状态,因此,你所看到的空单元格作为插入的结果,只是猜测,希望它帮助。



Answer 2:

快速更新:

不应该的问题,但我通知你并不需要:

[self.tableView beginUpdates]
[self.tableView endUpdates]

因为你执行一个操作。 不知道,如果该事项(它不应该)。


更新:

我应该说,这样的问题是很常见的。 这是关系到你的问题发帖

http://www.bdunagan.com/2008/12/08/uitextview-in-a-uitableview-on-the-iphone/

此外,另一些抽象了这一点。 具体来说,我已经没有这样的问题,尝试这样做:

http://furbo.org/2009/04/30/matt-gallagher-deserves-a-medal/

你可以使用: http://github.com/joehewitt/three20/

但它有一个学习曲线。

另一个问题#1解决这个问题:

编辑的UITextField内一个UITableViewCell失败

原谅我不能直接回答你的问题,但我认为该解决方案可能包含在这些环节之一。


原来的答案:

尝试:

[newTextField setNeedsDisplay];

有时tableviews可以“粘”与更新的UITextView /的UITextField内容。

如果还是不行,请确保您备份模式也正确地更新。 您还没有表现出任何代码,表明你更新了模型(虽然我认为你这样做,否则就可能已经抛出异常)。



文章来源: UITextField in UITableViewCell - adding new cells