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 - 触摸时键盘不显示

UISearchBar、textDidChange 事件、MultipleNSUrlConnection、tableView 崩溃