2014-01-29 81 views
0

我在寻找cellForRowAtIndexPath的替代方法。我想要做的是在我的私有方法中,我正在检查退出单元格中的文本是否存在于数组中,如果是,则选择该单元格,否则保持取消选中状态。我了解到,cellForRowAtIndexPath只对可见单元格有效,如果单元格不可见,则返回nil。以下是我现在的代码:cellForRowAtIndexPath的替代方法

- (void)selectCells:(NSArray *)array 
{ 
    for (int row = 0; row < [self.tableView numberOfRowsInSection:1]; row ++) 
    { 
     NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row 1]; 

     UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; 

     if ([array containsObject:cell.textLabel.text] && !cell.isSelected) 
     { 
      [self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]; 
     } 
    } 
} 

我还能用什么来达到这个目的?

+0

要清楚:你要替换的UITableView的cellForRowAtIndexPath,或在的cellForRowAtIndexPath的的UITableViewDelegate?他们是两个完全不同的东西。 (并且你不能真正“替换”任何一个 - 它们必须存在并被调用。) –

+0

我不想替换实际的cellForRowAtIndexPath。我正在寻找一种替代方法来获取我的tableview上的所有单元格。所以在上面的方法中,我使用cellForRowAtIndexPath来获取单元格,但我知道它不会给我不可见的单元格。我想在上面的方法,可以返回我所有的细胞或建议一些最好的方式来实现我想要的东西。 –

+0

嗯,你没有回答我的问题。但是你问错了。您不会尝试维护所有单元格,只是单元格中的数据。我发现一个包含NSMutableDictionarys的NSMutableArray对此很有效 - 每个单元属性都是相应字典中的名称/值对。 –

回答

6

我检查如果在离开单元中的文本是本到一个数组

这听起来像一个根本问题。在模型视图控制器范例中,视图负责显示数据并与用户交互,而模型负责存储和操作数据。你不应该在查看单元格的内容并根据此做出决定;你应该看看你的模型中的数据。

UITableView以这种方式工作,因为如果您遵循MVC,完全没有必要保持周围的细胞不可见。每当表需要显示一个新的单元格时,它会通过调用-tableView:cellForRowAtIndexPath:来请求该单元格。

我正在寻找一种替代方法来获取我的tableview上的所有单元格。

细胞并不全部同时存在。您可以想象使用不同的索引路径调用数据源的-tableView:cellForRowAtIndexPath:方法,就像表一样,并且这将返回每个单元格。但这可能不是正确的解决方案;您需要知道表格数据的存储位置,以便首先填充表格的单元格,所以您应该直接查看数据。

0

当您填充单元格时,它们都将唯一标识符存储在数组中。如果你没有太多的细胞这应该工作。然后,您可以使用self.cellArray或任何您所称的方法,并在索引路径中获取对象。我会按照建议将数据分开,然后在cellForIndexPath中渲染单元格时,请确保根据数据选择或取消选择单元格。

Setting static table cells