iPhone UISearchBar & keyboard外观
Posted
技术标签:
【中文标题】iPhone UISearchBar & keyboard外观【英文标题】:iPhone UISearchBar & keyboardAppearance 【发布时间】:2009-11-19 23:56:26 【问题描述】:当键盘出现时,我想设置
keyboardAppearance = UIKeyboardAppearanceAlert
我查看了文档,看来您只能更改键盘类型。
这可以在不违反任何 Apple 私有 API 的情况下完成吗?
【问题讨论】:
【参考方案1】:如果您想在整个应用程序中执行此操作,我发现最好的方法是在 UITextField 上使用 Appearance。在启动时将其放入您的 AppDelegate 中。
[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark];
【讨论】:
现在好多了!谢谢 这也是为我做的。在 ios7 上。尽管下面的类别创意看起来不错。【参考方案2】:应该这样做:
for(UIView *subView in searchBar.subviews)
if([subView isKindOfClass: [UITextField class]])
[(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert];
没有找到其他方法...
【讨论】:
我确认:它有效 :o) 我没有找到任何其他方法来获得它。这个答案应该被接受。 我想这可行,但我在这里找到了一个不同的、更简单的解决方案:***.com/questions/1594346/… @ecotax:您正在链接到有关键盘类型(默认、ASCII、数字...)的解决方案,但这是关于键盘外观(浅色、深色)的解决方案【参考方案3】:这不再适用于 iOS 7,因为 UISearchBar 视图层次结构已更改。 UITextView 现在是第一个子视图的子视图(例如,它在 searchBar.subviews[0].subviews
数组中)。
一个更面向未来的方法是递归检查整个视图层次结构,并检查UITextInputTraits
协议而不是UITextField
,因为这是实际声明方法的内容。一个干净的方法是使用类别。首先在 UISearchBar 上创建一个添加此方法的类别:
- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence
[(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence];
然后在 UIView 上添加一个添加这个方法的类别:
- (UIView *) firstSubviewConformingToProtocol: (Protocol *) pro
for (UIView *sub in self.subviews)
if ([sub conformsToProtocol: pro])
return sub;
for (UIView *sub in self.subviews)
UIView *ret = [sub firstSubviewConformingToProtocol: pro];
if (ret)
return ret;
return nil;
您现在可以像设置文本字段一样设置搜索栏上的键盘外观:
[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark];
【讨论】:
谢谢,非常有帮助!我认为有一个小错字:“[sub subviewConformingToProtocol:pro]”应该是“[sub firstSubviewConformingToProtocol:pro]”【参考方案4】:keyboardAppearance 是 UITextInputTraitsProtocol 的一个属性,表示该属性是通过 TextField 对象设置的。我不知道什么是警报键盘,从 SDK 来看,它是一个适合警报的键盘。
以下是您访问该物业的方式:
UITextField *myTextField = [[UITextField alloc] init];
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert;
现在当用户点击文本字段并显示键盘时,它应该是你想要的。
【讨论】:
您错过了这样一个事实,即这是来自 UISearchBar 而不是 UITextField。 UIKeyboardAppearanceAlert 有一个透明的背景,我想在我的所有应用程序中保持相同。正如您在 UITextFields 上演示的那样,这可以实现,但是 UISearchBar 内部也有一个文本字段。我想知道是否可以为此文本字段设置键盘外观。 我的错。在文档中,似乎没有在 UISearchBar 类上设置键盘透明度的属性或方法。您只能设置键盘类型。以上是关于iPhone UISearchBar & keyboard外观的主要内容,如果未能解决你的问题,请参考以下文章
UISearchBar 隐藏在 ipad 中,在 iphone 中它工作正常
iPhone 用 JSON 结果填充 UITableView(使用在 UISearchBar 中输入的搜索)
iphone中奇怪的UISearchBar取消按钮行为(在模拟器中工作正常)
(iPhone/iOS) UISearchBar Scope Buttons 覆盖 UITableView 的第一行
UISearchBar、textDidChange 事件、MultipleNSUrlConnection、tableView 崩溃