是否可以为搜索设置“按字母顺序滚动条 - 相似”?

时间:2016-01-05 15:17:39

标签: xcode uitableview alphabetical

目前,我有一个像facebook的新Feed这样的视图,其中按时间顺序列出的用户发布。现在在右侧我想放置按字母顺序滚动条,当用户滚动到任何字符时,他们可以搜索名称以该字符开头的用户搜索,是否可以?

根据我的理解,当用户滚动到每个字符并将该字符传输到服务器上的API以查询名称以该字符开头的数据库并将其发回到设备上显示时,我可以捕获事件。 / p>

请有人给我一些提示!

1 个答案:

答案 0 :(得分:5)

您想要做的是一种非常不寻常的用户界面,但如果您真的想这样做,您可以执行以下操作(您可以找到教程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来实现真正的实现,但是您可以使用它来测试您的用户界面,并且您可能会看到用户体验不好,因为索引的行为与往常不同。