UITableViewCell将消失

时间:2013-08-07 03:16:51

标签: ios uitableview

我制作了一个UITableView并包含一些自定义的UITableViewCells,在第一个单元格中(例如名为cell0)有一些UITextFields用于输入,当我滚动tableView时,cell0将从屏幕顶部消失,那我怎样才能得到在cell0中的UITextField文本?

cellForRowAtIndexPath将返回nil。

5 个答案:

答案 0 :(得分:12)

我找到的唯一方法是tableview委托

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell dealloc]
}

答案 1 :(得分:1)

UITableViewCells离开UITableView的可见区域时,它实际上已从表视图中删除并放回到重用队列中。如果选择重复使用,则由dequeueReusableCellWithIdentifier:返回。

从视图中删除单元格时没有回调。但是,在prepareForReuse返回单元格之前,会在单元格上调用dequeueReusableCellWithIdentifier:

你最终想做什么?

答案 2 :(得分:1)

根据Apple Documentation关于cellForRowAtIndexPath:,它返回"表示表格单元格的对象,如果单元格不可见或者indexPath超出范围,则返回nil。“#34;

根据MVC PatternUITableViewCell是一个视图。所以我更喜欢维护一个模型对象 - 也许它就像NSString实例一样简单 - 如果我是你的话,将文本保存在单元格中。您可以通过向控制器添加UITextField密钥的观察者来观察UITextFieldTextDidChangeNotification的更改。

- (void)textFieldDidChangeText:(NSNotification *)notification
{
    // Assume your controller has a NSString (copy) property named "text".
    self.text = [(UITextField *)[notification object] text]; // The notification's object property will return the UITextField instance who has posted the notification.
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // Dequeue cell...
    // ...
    if (!cell)
    {
        // Init cell...
        // ...
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChangeText:) name:UITextFieldTextDidChangeNotification object:yourTextField];
    }

    // Other code...
    // ...
    return cell;
}

请勿忘记删除-dealloc中的观察者。

答案 3 :(得分:0)

您需要在文本变更时保存文本(例如NSArray)。

答案 4 :(得分:-2)

您可以将textfield初始化为实例变量。

看起来像:

·H

UITextField *textfiled;

的.m

-(void)viewDidLoad
{
    //init textfield
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //init cell...

    [cell addSubview:textfield];
    return cell;
}