我有一个包含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的,并填写出来当代表协议被调用。 事情是,我希望得到我的代码尽可能通用,保持对私有变量尽可能低的需要,主要是为了简化细胞生成代码。
是否有任何其他的方式,当他们在外面的视图来获取文本框的值?
提前致谢!
作为Thyraz所说,只的UITableView为保持可见矩形细胞 - 和合理的缓冲以允许滚动。 这就是为什么“再利用标识符”是如此重要,他们指出哪些细胞可用于哪些表(关键的,当你有多个表操心)。 不幸的是,自身不回答你的问题。
用于存储那些textViews内容的责任是不是在UITableView的肩上。 这是你的工作,通过提供数据源委托协议的数据,因此你应该查询该信息的数据源。
编辑:这意味着,是的,你应该在其他地方存储这些数据,通常在包含该表视图的视图控制器类属性的形式。 我建议你使用的NSArray为目的,但你也可以做到这一点通过类型的字典,甚至在不得已的(这在理论上是多了,你可以做到这一点,但它是一个非常糟糕的想法之类的话)中,一系列属性。 就个人而言,我几乎总是使用NSArrays因为他们在适当的解决问题的方式构成,但理论上可以做到这一点其他方式。 (我用一个基于字典的结构只有一次,那就是在那里我的嵌套的数据是内部本身的递归结构的情况下)
但你知道的UITableView只保存细胞可见矩形? 当细胞离开屏幕,并且需要另一小区移动到可见区中的新电池,旧电池重新用于新的内容。
因此,有没有为你的表视图中的每一行一个单元。 如果你的表中包含了大量的数据,还有比细胞更行。
的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
}
}