2009-11-19 65 views

回答

-2

keyboardAppearance是UITextInputTraitsProtocol的一个属性,这意味着该属性是通过TextField对象设置的。我不知道警报键盘是什么,从SDK中它是一个适用于警报的键盘。

这里是你如何访问属性:

UITextField *myTextField = [[UITextField alloc] init]; 
myTextField.keyboardAppearance = UIKeyboardAppearanceAlert; 

现在,当用户点击文本框和键盘显示出来,它应该是你想要的。

+1

您错过了来自UISearchBar而不是UITextField的事实。 UIKeyboardAppearanceAlert有一个透明的背景,我希望在整个应用程序中保持一致。这可以像你在UITextFields上演示的那样实现,但是UISearchBar里面也有一个文本字段。我想知道是否可以为此文本字段设置键盘外观。 –

+0

我的不好。在文档中,它看起来像没有一个属性或方法来设置UISearchBar类的键盘透明度。您只能设置键盘类型。 – Justin

27

这应做到:

for(UIView *subView in searchBar.subviews) 
    if([subView isKindOfClass: [UITextField class]]) 
     [(UITextField *)subView setKeyboardAppearance: UIKeyboardAppearanceAlert]; 

没有发现这样做的任何其他方式...

+0

我确认:它的工作原理:o)我没有找到任何其他方式来获得它。这个答案应该被接受。 – CedX

+0

我想这个工程,但我发现了一个不同的,更简单的解决方案在这里:http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax:你链接到关于键盘类型(默认,ASCII,数字...)的解决方案,但这是关于键盘外观(光,黑) – auco

9

这不再适用于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]; 
+0

谢谢,非常有帮助!我认为这里有一个小错字:“[sub subviewConformingToProtocol:pro]”应该是“[sub firstSubviewConformingToProtocol:pro]” – auco

+0

@auco谢谢,纠正了! – stonemonk

35

,我发现要做到这一点,如果你想这样做在你的应用程序的最佳方式,是对的UITextField使用外观。在启动时将其放入AppDelegate。

[[UITextField appearance] setKeyboardAppearance:UIKeyboardAppearanceDark]; 
+0

对我来说诀窍,谢谢! – Funkycochise

+0

现在好多了!谢谢 – iGranDav

+0

这就是为我做的。在iOS7上。尽管下面的分类观点看起来不错。 –