2009-11-19 26 views
9

, ben belgeleri kontrol ettimiPhone UISearchBar & keyboardAppearance

keyboardAppearance = UIKeyboardAppearanceAlert 

ayarlamak istediğiniz ve sadece KeyboardType değiştirebilir gibi görünüyor.

Bu, herhangi bir Apple'ın özel API'sini ihlal etmeden yapılabilir mi?

cevap

-2

keyboardAppearance, UITextInputTraitsProtocol öğesinin bir özelliğidir, yani özellik, TextField nesnesi aracılığıyla ayarlanır. Bir Uyarı Klavyesi'nin ne olduğunu bilmiyorum, SDK'dan bir uyarı için uygun bir klavye.

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

Şimdi kullanıcı metin alanını musluklar ve klavye göründüğünde, bu istediğini olmalıdır: Burada

sen özelliğe erişmek nasıl.

+1

Bunun bir UISearchBar'dan geldiğine ve bir UITextField ürününden gelmediğini kaçırdınız. UIKeyboardAppearanceAlert, tüm uygulamamda aynısını korumak istediğim saydam bir arkaplana sahiptir. Bu, UITextFields üzerinde gösterdiğiniz gibi elde edilebilir, ancak UISearchBar da içinde bir metin alanı vardır. Bu metin alanı için klavye görünümünü ayarlamak mümkün olup olmadığını bilmek istedim. –

+0

Benim hatam. Dokümanlarda, UISearchBar sınıfında klavye saydamlığını ayarlamak için bir özellik veya yöntem olmadığı anlaşılıyor. Sadece klavye tipini ayarlayabilirsiniz. – Justin

27

Bu yapmalıyım:

yapmanın başka bir yolu bulamadık

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

UISearchBar görünümü hiyerarşi değiştiği için bu artık iOS 7'de çalışmaktadır
+0

Onaylıyorum: işe yarıyor: o) Bunu elde etmek için başka bir yol bulamadım. Bu cevap kabul edilmeli. – CedX

+0

Bu işe yarıyor sanırım, ama burada daha farklı, daha basit bir çözüm buldum: http://stackoverflow.com/questions/1594346/dynamically-changing-keyboard-type-for-a-uisearchbar – ecotax

+0

@ecotax: linkliyorsunuz keyboardType (varsayılan, ASCII, Sayılar…) ile ilgili bir çözüm için, ancak bu klavye ile ilgili (açık, koyu) – auco

9

. UITextView artık ilk alt görüntünün bir alt görünümüdür (ör., searchBar.subviews[0].subviews dizisinde onun).

Bunu yapmanın daha sonraki bir yolu, tüm görünüm hiyerarşisini yinelemeli olarak kontrol etmek ve UITextField yerine UITextInputTraits protokolünü kontrol etmek olacaktır, çünkü bu aslında yöntemi açıklar. Bunu yapmanın temiz bir yolu kategorileri kullanmaktır.

- (void) setKeyboardAppearence: (UIKeyboardAppearance) appearence { 
    [(id<UITextInputTraits>) [self firstSubviewConformingToProtocol: @protocol(UITextInputTraits)] setKeyboardAppearance: appearence]; 
} 

Sonra UIView bir kategori eklemek bu yöntemi ekler:

- (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; 
} 

Artık aynı arama çubuğunda klavye görünümünü ayarlayabilirsiniz Öncelikle bu yöntemi ekler UISearchBar bir kategori yapmak Eğer bir textfield'ı olur yol:

[searchBar setKeyboardAppearence: UIKeyboardAppearanceDark]; 
+0

teşekkürler, çok yararlı! Bence küçük bir yazım hatası var: "[sub subviewConformingToProtocol: pro]" "[sub firstSubviewConformingToProtocol: pro]" olmalıdır " – auco

+0

@auco teşekkürler!" – stonemonk

35

Ben uygulamanızda boyunca bunu yapmak istiyorsanız, bunu yapmak için buldum iyi yolu, UITextField üzerinde Görünüm kullanmaktır. Lansmanında bunu AppDelegate’ınıza koyun.

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

Benim için hile yaptın, teşekkürler! – Funkycochise

+0

Çok daha iyi bir yol şimdi! Teşekkürler – iGranDav

+0

Thats benim için de yaptı. IOS7'de. Aşağıdaki kategori fikri de olsa iyi görünüyor. –