如何禁用 UITableView 的部分索引的用户交互?

Posted

技术标签:

【中文标题】如何禁用 UITableView 的部分索引的用户交互?【英文标题】:How to disable user interaction of section index for UITableView? 【发布时间】:2014-07-24 20:42:53 【问题描述】:

我已经在我的应用程序中实现了一个部分索引,表格视图右侧的字母允许快速跳转到一个部分。我想在某些情况下禁用用户与该部分索引的交互,但UITableView 上没有允许直接访问该部分索引的属性。

如何禁用部分索引的用户交互?

我已禁用与表格本身的交互,因此您无法滚动或点击任何单元格,但这仍然允许与部分索引进行交互,因此它会在点击部分图标时滚动到每个部分。

self.tableView.userInteractionEnabled = NO;

如果无法禁用与节索引本身的交互,有没有办法防止更改表格的滚动位置?这正是我想要得到的。

【问题讨论】:

你是指右边的索引还是部分索引标题 屏幕最右侧的单字符按钮。 看看这个***.com/questions/5987399/…我会研究更多 节索引是另一个UITableView吗? 你不能通过在sectionForSectionIndexTitle中返回nil来显示它。当我的行数少于屏幕高度并且不需要显示索引时,我会这样做。 【参考方案1】:

作为替代方案,如果您希望允许滚动 - 以便用户可以看到其中的内容 - 但阻止他们进行选择等,您可以改为执行以下操作:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

    if (self.tableViewIsDidabled)
        return nil;
    else
        return indexPath;

并且,将 sectionForSectionIndexTitle 设置为 nil。

【讨论】:

谢谢。虽然我不希望这种行为,但也许其他人会发现您的答案很有用。 :)【参考方案2】:

我找到了解决办法。

保留 BOOL 以了解何时应禁用节索引。

然后在tableView:sectionForSectionIndexTitle:atIndex: 中只需return -1 以防止在点击索引时滚动。

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index

    if (self.tableViewIsDisabled) 
        return -1;
    
    ...

【讨论】:

【参考方案3】:
UITableView *tab;

mm 禁用滚动..

tab.scrollEnabled = NO;

如果你想在某些情况下使用它.. 你可以试试强大的..

if(...)
tab.scrollEnabled = NO;

【讨论】:

不幸的是,将scrollEnabled 设置为NO 并不能阻止跳转到具有索引的不同部分。

以上是关于如何禁用 UITableView 的部分索引的用户交互?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 UITableView 中不可用的索引标题

如何根据uitableview中的部分获取索引路径?

自定义 UITableView 部分索引

禁用 UITableView 浮动部分标题点击?

如何使用用户的 iPod 库艺术家索引 UITableView?

滚动时禁用 UITableView 垂直反弹