【问题标题】:Is it possible to make "Alphabetical scroll bar - alike" for search?是否可以制作“按字母顺序滚动条 - 类似”进行搜索?
【发布时间】:2016-01-05 15:17:39
【问题描述】:

目前,我有一个类似于 facebook 新提要的视图,其中用户按时间顺序发布帖子。现在我想在右侧放置按字母顺序排列的滚动条,当用户滚动到任何字符时,他们可以按名称以该字符开头的用户搜索帖子,这可能吗?

据我了解,如果我可以在用户滚动到每个字符时捕获事件并将该字符传输到服务器上的 API 以查询名称以该字符开头的数据库并将其发布回设备上显示,则可以解决问题。

谁能给我一些提示!

【问题讨论】:

  • 你应该搜索“UITableView section index”。您正在谈论的索引是 iOS 的一部分,实施起来相当简单。在 Stack Overflow 上已经回答了好几次了。
  • 通过使用你的方法,我认为通常视图已经需要按字母顺序排列,滚动只有助于快速跳转到每个部分。虽然我的问题是关于按日期时间排序的列表,以及在滚动时按字母重新排序。
  • 啊,我明白了。你不担心这样做会破坏 iOS 的基本行为吗?如果用户在屏幕右侧看到按字母顺序排列的列表,他们已经被教导(超过 8 年的经验)这是一种快速滚动列表的方法。通过改变你提议的方式,你会让你的应用看起来被破坏并阻止用户使用它。
  • 只要方便用户,我从不觉得有什么可担心的。或者我可以把它放在左边让它变得不同!不过以后再说吧,首先我想讨论一下有没有可能,怎么做?

标签: xcode uitableview alphabetical


【解决方案1】:

您想要做的是一种非常不寻常的用户界面,但如果您真的想要这样做,您可以执行以下操作(您可以找到教程here):
在您的tableViewController 中,创建一个索引数组,例如要显示在tableView 旁边的一组字母字符,例如:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    NSARRAY *characters = @[@" ", "A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z"];  
    return characters;
}  

根据docs:„一个字符串数组,用作表格视图中部分的标题,并出现在表格视图右侧的索引列表中。表格视图必须是普通样式 (UITableViewStylePlain)。例如,对于按字母顺序排列的列表,您可以返回一个包含字符串“A”到“Z”的数组。

如何将数据分类到tableView 的各个部分完全取决于您。在您的情况下,您希望将所有时间排序的数据放在一个部分中,可能没有特殊的标题。因此,您的数组 characters 以索引 0 处的标题 @" " 开头,并且您将所有时间排序的条目放在第 0 节中。 然后,实现以下方法:

 - (NSInteger)tableView:(UITableView *)tableView 
              sectionForSectionIndexTitle:(NSString *)title 
              atIndex:(NSInteger)tappedIndex {
     self.savedTappedIndex = tappedIndex;
     return 0;
 }

这种方法可能有点混乱。它执行以下操作:当用户点击您的tableView (@" " … @"Z") 数组characters 中的某个字符旁边的索引时,该字符在数组中的位置(其索引)被输入到这种方法。您可以将其存储在属性中。如果您像示例中一样返回 0,则表格的第 0 部分将按原样重新显示。
如果您对属性savedTappedIndex 进行键值观察(KVO),您将在重新显示表格时收到通知。然后,您可以通过

读取点击的字符
NSString *tappedCharacter = characters[self.savedTappedIndex];  

使用此字符,您可以向服务器询问提要,这些提要由名称以该字符开头的用户创建。
然后数据可以显示在tableView 中,同样在第 0 部分。
当然,您不应再在tableView 旁边显示索引。

再一次,这种行为可能会让用户非常困惑,因为它非常不寻常。

最后说明:

您不应该将上面的 hack 用于真正的实现,但您可以使用它来测试您的用户界面,您可能会发现用户体验不好,因为索引的行为与往常不同。

【讨论】:

  • 感谢 Reinhard 的出色回答!很高兴有时我们可以以不同的方式思考和执行这个想法!最好的!
猜你喜欢
  • 2020-08-09
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多