2009-11-19 25 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上。儘管下面的分類觀點看起來不錯。 –