从获得的UITextField文本上TableViewCell(Get text from UITe

2019-09-16 19:58发布

我有一个包含UITextFields原型细胞的UITableViewController。 要配置这些custome细胞,我创建了一个UITableViewCell子类。 我已经通过出口conected文本域到小区的子类(nonatomic, weak)

在这个子类我创建了一个协议,其中的UITableViewController是其代表,使每次的东西在这些文本框变化时,TableViewController知道。 基本上,我想这能节省一大笔的NSUserDefaults的值

此外,为了从这些文本框的动态获取值,我可以做这样的事情:

((TextFieldCell*)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:2 inSection:0]]).textField.text

它的工作原理确定大部分的时间。 然而,当文本框是视图之外,因为它滚动,我从的TextField.text得到vaulue是(空)。 只要它在视图中再次得到,一切都恢复了正常。

我试图出口改由弱到强,但无济于事。

我想我可以定义在类的一些私人NSString的,并填写出来当代表协议被调用。 事情是,我希望得到我的代码尽可能通用,保持对私有变量尽可能低的需要,主要是为了简化细胞生成代码。

是否有任何其他的方式,当他们在外面的视图来获取文本框的值?

提前致谢!

Answer 1:

作为Thyraz所说,只的UITableView为保持可见矩形细胞 - 和合理的缓冲以允许滚动。 这就是为什么“再利用标识符”是如此重要,他们指出哪些细胞可用于哪些表(关键的,当你有多个表操心)。 不幸的是,自身不回答你的问题。

用于存储那些textViews内容的责任是不是在UITableView的肩上。 这是你的工作,通过提供数据源委托协议的数据,因此你应该查询该信息的数据源。

编辑:这意味着,是的,你应该在其他地方存储这些数据,通常在包含该表视图的视图控制器类属性的形式。 我建议你使用的NSArray为目的,但你也可以做到这一点通过类型的字典,甚至在不得已的(这在理论上是多了,你可以做到这一点,但它是一个非常糟糕的想法之类的话)中,一系列属性。 就个人而言,我几乎总是使用NSArrays因为他们在适当的解决问题的方式构成,但理论上可以做到这一点其他方式。 (我用一个基于字典的结构只有一次,那就是在那里我的嵌套的数据是内部本身的递归结构的情况下)



Answer 2:

但你知道的UITableView只保存细胞可见矩形? 当细胞离开屏幕,并且需要另一小区移动到可见区中的新电池,旧电池重新用于新的内容。

因此,有没有为你的表视图中的每一行一个单元。 如果你的表中包含了大量的数据,还有比细胞更行。



Answer 3:

的UITableViewController不保留在细胞周围,一旦关闭屏幕。 您可以使用以下方式获得以前用过的一个作为内存管理优化,但你必须假设细胞需要有价值观每次他们来在屏幕上(即使出队)的时间在他们身上复位,因为没有保证什么该值会。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier1 = @"Cell1";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier2];
    if( cell == nil ) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier1] autorelease];
        cell2.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell2.editingAccessoryType = UITableViewCellAccessoryNone;
    }   
    switch( indexPath.section ) {
        case first_Section:
            if( row == 0 ) {
                cell1.textLabel.text = @"Some Text";
                cell1.accessoryView = [self myCustomViewControl];
                cell = cell1;
            }
            ... etc
    }
}


文章来源: Get text from UITextField on a TableViewCell