目前我有一个像Facebook的新饲料的视图,其中按时间顺序列出的用户发布.现在在右侧我想放置按字母顺序滚动条,当用户滚动到任何字符时,他们可以搜索名称以该字符开头的用户搜索,是否可以?
根据我的理解,当用户滚动到每个字符并将该字符传输到服务器上的API以查询名称以该字符开头的DB并将其发回到设备上显示时,我可以捕获事件.
请问任何人给我一些提示!
你想要做的是相当不寻常的类型的用户界面,但如果你真的想这样做,你可以做以下的(你可以找到一个教程这里):
在你的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; }
根据文档:" 一个字符串数组,用作表视图中节的标题,并出现在表视图右侧的索引列表中.表视图必须是普通样式(UITableViewStylePlain
).例如,对于按字母顺序排列的列表,您可以返回包含字符串"A"到"Z"的数组."
这完全取决于您,如何将数据分类到数据的各个部分tableView
.在您的情况下,您希望将所有时间排序的数据放在一个部分中,可能没有特殊的标题.因此,您的数组以索引0处characters
的标头开头@" "
,并且您将所有时间排序的条目放在第0节中.然后,实现以下方法:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)tappedIndex { self.savedTappedIndex = tappedIndex; return 0; }
这种方法可能有点混乱.它执行以下操作:当用户点击tableView
(@" " … @"Z"
)数组中某个字符的一侧的索引时,该字符在数组characters
中的位置(其索引)将输入到此方法中.您可以将其存储在房产中.如果您在示例中返回0,则表的第0部分将按原样重新显示.
如果您对属性进行键值观察(KVO)savedTappedIndex
,则会在重新显示表时收到通知.然后,您可以阅读点击的字符
NSString *tappedCharacter = characters[self.savedTappedIndex];
使用此字符,您可以向服务器询问是否由名称以此字符开头的用户创建的供稿.
然后,数据可以再次显示在tableView
第0部分中
.当然,您应该不再显示数据的一侧tableView
.
再一次,这种行为可能会让用户感到非常困惑,因为这很不寻常.
最后的说明:
您不应该使用上面的hack来实现真正的实现,但是您可以使用它来测试您的用户界面,并且您可能会看到用户体验不好,因为索引的行为与往常不同.