选择标签栏项目时激活 UISearchBar - 帮助还是阻碍?

Posted

技术标签:

【中文标题】选择标签栏项目时激活 UISearchBar - 帮助还是阻碍?【英文标题】:Activating UISearchBar upon selecting a Tab Bar Item - Help or Hindrance? 【发布时间】:2009-09-03 19:32:33 【问题描述】:

我正在开发一个应用程序,我被要求将 UITabBarItem 添加到我们应用程序的Tab Bar,并使用它自己的专用搜索功能。这是对整个应用程序中内置搜索的补充(通过点击其他 UITabBarItem 并搜索其他 UITableView)。

现在,首先想到的是 Apple 人机界面指南 (HIG),其中指出:

"避免使用选项卡进行搜索,除非 它是您的主要功能 应作为特色的应用程序 一种独特的模式。”

因此,普遍的想法是避免,但这不是硬性规定。尽管如此,我还是让客户注意到了这一点。他们回答说:“我们担心人们不会知道在其他 UITabBarItemUITableView 中寻找搜索。”我的回答是:“Apple 自己的应用程序提供了这种搜索体验。任何已经使用这些应用程序的人都会知道如何使用您的应用程序。这就是为什么我们希望 UE 保持一致并努力遵循 HIG。” (更不用说这是应用商店批准的要求,但我离题了。)

嗯 .. 他们的second 回应是:“好的,这是有道理的,但我们也希望人们能够搜索所有内容,而不仅仅是不同表格视图中的特定主题。 "

很好。全球搜索它是。 :)

寻找一个带有专用搜索UITabBarItem的示例,我遵循了 iPhone 自己的 App Store 模型。我对最终的 UI 感到非常满意。在 UISearchBar 中输入时,您会得到一个简单的纯文本、边输入边搜索的名称建议列表(以最小的输入时间延迟完成,以免使搜索服务器不堪重负)。您可以调整搜索文本,点击其中一个建议来代替您的搜索词,或者直接点击“搜索”按钮。然后将结果列表替换为更精美的结果集,以更全文的方式进行搜索,每个单元格中都有图标和有用的元数据。常用的成分。点击 UISearchBar 会返回纯文本建议。取消搜索会删除所有内容。不理会它会保留最后一个查询(结果列表)以供显示。

所以我将这个呈现给客户......并且...... 他们喜欢它!他们只有最后一个请求:“当我们选择专用搜索 UITabBarItem 时,键盘可以立即弹出吗?现在我们必须点击 UISearchBar,但这也是一个点击很多。”

(大概他们希望只有在没有预先存在的搜索在起作用时才发生这种情况。)

起初我认为这是合理的......但后来我查看了其他应用程序。我找不到这样做的任何。即使是 App Store 应用程序也需要您点击 UISearchBar 来调出键盘。另外,HIG 说明了很多:

"当用户点击搜索栏时, 键盘出现。”

不是“当用户点击搜索UITabBarItem时,会出现一个键盘。”

此外,用户界面应该是宽容的。如果您犯了一个错误并打算在 更多 列表中选择另一个项目怎么办? (或者如果它在正确的标签栏上,如果您打算选择不同的 UITabBarItem 怎么办?)现在您必须停止并取消搜索以关闭键盘,即使你不是故意提出来的。

总之,我有点心烦意乱,希望了解最佳实践和其他 POV。 在这种情况下会怎么做?

【问题讨论】:

【参考方案1】:

有人刚刚给我发了一个有趣的想法。如果您点击并按住搜索选项的时间比平时长一点,或者如果您双击它,这可能是我们自动调出键盘的提示。否则,它的行为方式与 iPhone UI 生态系统的其余部分相同。

只要可以检测到 UITabBarItemUITableViewCell 的点按和瞬时保持或双击,这听起来似乎是合理的。 iPhone 相当于按住 Option 或 Cmd。

还有一个建议:如果搜索选项在更多列表中,请调出键盘。如果它在 Tab Bar 上(因为用户把它放在那里),首先不要显示键盘。 (嗯。这似乎有点不一致,但我在这里提到它是为了完整性。)

想法?

【讨论】:

反对长按的论据:已经用于表格视图中的编辑切换。反对双击的论据:不能在 moreNavigationController 的表视图中继承或使用类别,因为它是遥不可及的。因此,要么我们与 Apple 对 App Store 的搜索 UE 所做的不同,要么保持一致。【参考方案2】:

几个答案,大多忽略了你是否真的应该这样做:

您可以通过将搜索字段设置为第一响应者来使键盘自动出现:

[mySearchField becomeFirstResponder];

标签栏上最多可以有五个项目,如果超过五个,实际上只能得到四个,因为“更多”项目占用了一个空间。 items 属性的 UITabBar 文档指出:

项目,UITabBarItem 的实例,按它们在此数组中出现的顺序在选项卡栏上可见。

因此,您可以像这样确定搜索项是否在栏中(而不是“更多”部分)(代码假定它在搜索视图控制器中):

UITabBarItem *item = [self tabBarItem];
NSInteger indexOfTabBarItem = [[tabBar items] indexOfObject:item];
BOOL isInMainTabBar = (indexOfTabBarItem > -1) && (indexOfTabBarItem < 4);

我个人认为,当您第一次进入搜索页面时自动显示键盘并不算太糟糕,因为这就是您要做的全部。当然,问题在于,如果您只是随机点击内容来查看它的作用,那么取消搜索以恢复随机点击会很痛苦。

编辑:该死,我误读了你的问题 - 我以为你在寻找技术建议。嗯...这可能对某人有用!

【讨论】:

谢谢!是的,从技术 POV 来看,我已经涵盖了,但很高兴看到您的建议符合要求。另外,阅读本文的其他人可能不知道,因此无论如何都值得赞赏!我的一部分想要避免混淆已经存在的生态系统,但另一部分理解让键盘出现的愿望。 (请参阅我关于双击作为替代方案的答案......只是你如何在 UITabBar 的 moreNavigationController 中做到这一点?不能子类化,也不能使用类别!)

以上是关于选择标签栏项目时激活 UISearchBar - 帮助还是阻碍?的主要内容,如果未能解决你的问题,请参考以下文章

UISearchController 的 UISearchBar 在活动时移出屏幕

从模态视图关闭的标签栏项目中删除选择图像

如果推送控制器隐藏标签栏,UISearchBar 会跳转

每次选择标签栏项目时如何重置导航堆栈?

如何将图像设置为 UISearchBar 的范围栏项目?

UISearchController 搜索栏无法激活