目前,我有一个像facebook的新Feed这样的视图,其中按时间顺序列出的用户发布。现在在右侧我想放置按字母顺序滚动条,当用户滚动到任何字符时,他们可以搜索名称以该字符开头的用户搜索,是否可以?
根据我的理解,当用户滚动到每个字符并将该字符传输到服务器上的API以查询名称以该字符开头的数据库并将其发回到设备上显示时,我可以捕获事件。 / p>
请有人给我一些提示!
答案 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来实现真正的实现,但是您可以使用它来测试您的用户界面,并且您可能会看到用户体验不好,因为索引的行为与往常不同。