【问题标题】:How to detect a section in a table view is out of view?如何检测表格视图中的部分不在视图中?
【发布时间】:2012-02-03 01:34:59
【问题描述】:

有一个包含三个部分的表格视图。最后一部分可能包含许多项目。一旦表格视图仅显示最后一部分,我需要在导航栏上显示一个按钮(例如,用户向上滚动单元格以使第一个和第二个视图变得不可见)。

那么基本上如何检测表格视图现在只显示最后一个部分,而前两个部分的单元格不再可见?

【问题讨论】:

    标签: ios uitableview


    【解决方案1】:

    UITableView 类有方法:

    - (NSArray *)indexPathsForVisibleRows;
    - (NSArray *)indexPathsForRowsInRect:(CGRect)rect;
    

    你试过了吗?他们有帮助吗?

    【讨论】:

    • 不,因为我不知道从哪里开始。我怎么知道何时调用这些函数?用户可以上下滚动,我不想在每次这样的移动时都拉出可见的行(如果可能的话)。
    • UITableView 有一个委托方法: - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath。 TableView 在使用单元格绘制行之前将此消息发送给其委托,从而允许委托在单元格对象显示之前对其进行自定义。您可以检查 indexPath,如果它有您感兴趣的 indexPath,您可以触发一个方法来切换导航栏中的按钮。它回答了你的问题吗?
    • 谢谢,这可能会有所帮助,但是知道除了最后一个部分之外没有其他部分可见是不够的。我想我可以扭转这种情况以始终显示按钮并隐藏它,以防在第一部分或第二部分中为单元格调用 villDisplayCell。这应该工作......
    【解决方案2】:

    您可以尝试遍历 UITableView 的 indexPathsForVisibleRows 以查看相关部分中的单元格是否包含在数组中。

    【讨论】:

    • 是的,但是什么时候调用那个方法呢?每次用户向上或向下滚动表格视图时?
    • 是的,你是对的。但是听滚动视图委托会有所帮助。 ((UIScrollView *)self.tableView).delegate = self;
    【解决方案3】:

    您可以使用 tableview 委托通过检查它的索引路径来检查正在创建的部分单元格。

    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

    或者您可以使用下面的函数来获取可见的单元格,然后检查它属于哪个部分。

    • (NSArray *)indexPathsForVisibleRows;

    【讨论】:

    • 如上所述,我需要在用户上下滚动表格视图时实时检查这一点,以确定除了最后一个部分之外没有其他部分显示的特定时间.我不确定这是否是最好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多