【问题标题】:iPhone UISearchBar & keyboardAppearanceiPhone UISearchBar & keyboard外观
【发布时间】:2009-11-19 23:56:26
【问题描述】:

当键盘出现时,我想设置

keyboardAppearance = UIKeyboardAppearanceAlert

我查看了文档,看来您只能更改键盘类型。

这可以在不违反任何 Apple 私有 API 的情况下完成吗?

【问题讨论】:

    标签: iphone iphone-sdk-3.0 uisearchbar


    【解决方案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) 我没有找到任何其他方法来获得它。这个答案应该被接受。
    • 我想这可行,但我在这里找到了一个不同的、更简单的解决方案:stackoverflow.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 类上设置键盘透明度的属性或方法。您只能设置键盘类型。
    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多