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