如何在iOS7中更改UISearchBar的inputView?

如何在iOS7中更改UISearchBar的inputView?

问题描述:

在iOS6的,我用下面的代码改变的UISearchBar如何在iOS7中更改UISearchBar的inputView?

的inputView
for (UIView *view in _searchBar.subviews) { 
    if ([view isKindOfClass: [UITextField class]]) { 
     UITextField* textField = (UITextField*)view; 
     [textField setInputView:_myKeyboard]; 
     break; 
    } 
} 

的UISearchBar在iOS7发生了变化,我不知道如何找到文本框来改变inputView。 请帮忙!谢谢!

子视图的层次结构已经改变iOS7,这样你就可以使用下面的代码:

// subviews 
NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews]; 
for (UIView *view in searchBarSubViews) { 
    if([view isKindOfClass:[UITextField class]]) 
    { 
     UITextField* search=(UITextField*)view; 
     [search setFont:[UIFont fontWithName:@"MyCustomFont" size:15]]; 
     search.delegate = self; 

     [search setInputView:self.customKeyboard]; 
     [self.customKeyboard setTextView:search]; 
    } 
} 
[self.searchBar reloadInputViews]; 
+1

您也可以使用以下命令从UISearchBar获取UITextField:[self.searchBar valueForKey:@“_ searchField”] – matzino

试试这个代码:

for (UIView *view in _searchBar.inputView.subviews) { 
     if ([view isKindOfClass: [UITextField class]]) { 
      UITextField* textField = (UITextField*)view; 
      [textField setInputView:_myKeyboard]; 
      break; 
     } 
    } 
在iOS的7子视图

不工作。从iOS7 UI对象有一个额外的包装器/容器。可能是这段代码会帮助你。

+0

_searchBar.inputView.subviews无法正常工作。不管怎么说,还是要谢谢你! –

使用下面的代码:

NSArray *subViewsOfSearchBar = [[self.YOurSearchBar.subviews objectAtIndex:0] subviews]; 
for(int i =0; i< subViewsOfSearchBar.count; i++) { 
    if([[subViewsOfSearchBar objectAtIndex:i] isKindOfClass:[UITextField class]]) 
    { 
     UITextField *searchTxtField=(UITextField*)[subViewsOfSearchBar objectAtIndex:i]; 
     [searchTxtField setInputView:self.customKeyboard]; 
    } 
} 
[self.searchBar reloadInputViews];