UISearchBar 的自定义 InputView 在 iOS7 中不起作用

Posted

技术标签:

【中文标题】UISearchBar 的自定义 InputView 在 iOS7 中不起作用【英文标题】:Custom InputView for UISearchBar doesn't work in iOS7 【发布时间】:2013-09-24 04:24:39 【问题描述】:

我需要在 UISearchBar 中设置我的自定义 inputView。

所以我编写了以下代码,在 ios5 和 iOS6 中完美运行。

但它在 iOS7 中不起作用。

for(int i =0; i<[self.searchBar.subviews count]; i++) 
            if([[self.searchBar.subviews objectAtIndex:i] isKindOfClass:[UITextField class]])
            
                [(UITextField*)[searchBar.subviews objectAtIndex:i] setFont:[UIFont fontWithName:@"MyCustomFont" size:15]];
                UITextField* search=(UITextField*)[searchBar.subviews objectAtIndex:i];
                search.delegate = self;

                [(UITextField*)[self.searchBar.subviews objectAtIndex:i] setInputView:self.customKeyboard];
                [self.customKeyboard setTextView:search];
            
        



        [self.sBar reloadInputViews];

我该怎么做?

【问题讨论】:

【参考方案1】:

iOS7 中的 searchBar 子视图层次结构已更改,请尝试以下操作:

iOS7:

NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews];

iOS6 及之前:

NSArray *searchBarSubViews =  self.searchBar.subviews;

试试下面的更新功能:

NSArray *searchBarSubViews = [[self.searchBar.subviews objectAtIndex:0] subviews];
for(int i =0; i<[searchBarSubViews count]; i++) 
    if([[searchBarSubViews objectAtIndex:i] isKindOfClass:[UITextField class]])
    
        UITextField* search=(UITextField*)[searchBarSubViews objectAtIndex:i];
        [search setFont:[UIFont fontWithName:@"MyCustomFont" size:15]];
        search.delegate = self;

        [search setInputView:self.customKeyboard];
        [self.customKeyboard setTextView:search];
    

[self.sBar reloadInputViews];

【讨论】:

那么如何使用 NSArray 设置 InputView? 通过在第二行改变你 if([[ [[self.searchBar.subviews objectAtIndex:0] subviews] objectAtIndex:i] isKindOfClass:[UITextField class]]) 等等休息。 整个函数的searchBar.subviews改了吗? 兄弟。现在我明白了。欢呼!。 :D

以上是关于UISearchBar 的自定义 InputView 在 iOS7 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

自定义 NavigationBar 中的 UISearchBar

UISearchController 在关闭时清除 UISearchBar 文本

UIMenuController 显示错误的项目

地图注释的自定义标题

Swift iOS 8+ UISearchBar图标,占位符和文本居中

自定义 UISearchbar