自定义UISearchBar的InputView在iOS7中无效

3
我需要在 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个回答

6

在iOS7中,搜索栏的子视图层次结构已经更改,可尝试以下操作:

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? - Fire Fist
通过更改第二行中的if语句 if([[ [[self.searchBar.subviews objectAtIndex:0] subviews] objectAtIndex:i] isKindOfClass:[UITextField class]]),以此类推处理其余部分。 - Tarek Hallak
你在整个函数中改变了searchBar.subviews吗? - Tarek Hallak
谢谢,兄弟。现在我明白了。加油! :D - Fire Fist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接