如何在 iOS7 中更改 UISearchBar 的 inputView?

Posted

技术标签:

【中文标题】如何在 iOS7 中更改 UISearchBar 的 inputView?【英文标题】:How to change inputView of UISearchBar in iOS7? 【发布时间】:2013-11-29 05:02:08 【问题描述】:

ios6 中,我使用下面的代码来改变 UISearchbar 的 inputView

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

iOS7 的UISearchbar 变了,不知道怎么找textField 来改变inputView。 请帮忙!谢谢!

【问题讨论】:

【参考方案1】:

iOS7中subview的层次结构发生了变化,可以使用如下代码:

// 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];

【讨论】:

您也可以使用以下命令从 UISearchBar 获取 UITextField:[self.searchBar valueForKey:@"_searchField"]【参考方案2】:

使用以下代码:

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];

【讨论】:

【参考方案3】:

试试这个代码:

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

在 iOS 7 子视图中不起作用。从 iOS7 UI 对象有一个额外的包装器/容器。可能这段代码会对你有所帮助。

【讨论】:

以上是关于如何在 iOS7 中更改 UISearchBar 的 inputView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS7 中更改 UISearchBar 的 inputView?

如何在 iOS 7 的 UISearchBar 中更改位置或隐藏放大镜图标?

如何在iOS 7中更改文本UISearchBar的取消按钮颜色?

如何在 iOS7 中右对齐 UISearchbar 的文本

在 iOS 9+ 中更改 UISearchBar 文本颜色

在 iOS 8 中更改 UISearchBar 取消按钮文本