cellForRowAtIndexPath的替代方案

tec*_*man 0 cocoa-touch uitableview ios

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

- (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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我还能用什么来实现这个目标?

Cal*_*leb 6

我正在检查退出单元格上的文本是否存在于数组中

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

UITableView按照它的方式工作,因为如果您正在关注MVC,那么完全没有必要保持周围的细胞不可见.每当表需要显示一个新单元格时,它会通过调用来询问您该单元格-tableView:cellForRowAtIndexPath:.

我正在寻找替代方案来获取我的tableview上的所有单元格.

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