在UITableView中迭代单元格的成本

时间:2011-12-28 23:55:02

标签: iphone ios

UITableViewCell的每个UITableView内,我有一个UIScrollView。滚动视图已设置,以便当用户向右滑动时,将出现一个菜单。这类似于iPhone Twitter应用程序中的单元格行为。当用户在另一个单元格上滑动时,我遍历所有可见单元格以告诉UIScrollView滚动回单元格内容(即其初始位置)。迭代在scrollViewWillBeginDragging方法中完成,代码如下:

   - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {

        if( [scrollView tag] == 90 ) {

            NSLog(@"Dragging a scroll view inside a cell!");

            for (UITableViewCell *cell in self.tableView.visibleCells) {

                [(UICellContentScrollView *)[cell viewWithTag:90] scrollRectToVisible:CGRectMake(0.0f, 0.0f, 320.0f, [cell frame].size.height) animated:YES];

            }

        }

    }

在方法viewDidDisappear中,我再次遍历所有单元格以重置各种类似的东西:

- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidDisappear:animated];


    for( NSUInteger section = 0; section < [[self tableView] numberOfSections]; section++ ) {

        for( NSUInteger row = 0; row < [[self tableView] numberOfRowsInSection:section]; row++ ) {

            UITableViewCell *cell = [[self tableView] cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
             // resetting cell here

        }

    }

}

我的问题是,如果我(a)以正确的方式进行此操作,并且(b)是否有人对更好的解决方案有任何建议,因为表格视图可能会存储50个(不超过100个)项目。

1 个答案:

答案 0 :(得分:1)

查看NSNotification文档。您可以注册所有UITableViewCell个对象以接收可以调用类似“cellWasSwiped”或“needToResetCells”之类的通知。然后,只要您想重置单元格,就可以发布通知。所有注册接收它的UITableViewCell个对象都会收到通知,然后可以调用您需要的任何方法。