iOS7 UISearchBar取消按钮文字未显示。按钮似乎是不可见的。

5
我希望这是一个简单的问题。
我有一个搜索栏,上面有一个取消按钮:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar{
    [searchBar setShowsCancelButton:YES animated:YES];
}

唯一的问题是取消按钮上的文本没有显示。

enter image description here

按钮显然存在,因为我可以点击它,但当按钮显示时没有文本出现。就像按钮是不可见的一样。这段代码在iOS6中运行良好,但现在在iOS7中出现了这个问题。有人有什么想法吗?我正在使用UISplitViewController,我的搜索栏位于MasterViewController的navigationItem.titleView中。

6个回答

9

很可能您得到了清晰的色调颜色,这是我能想象的唯一原因。尝试设置:

_searchBar.tintColor = [UIColor redColor];

您如何创建UISearchBar?


我认为这可能是问题所在,但我尝试了不同的色调颜色,甚至完全删除了色调,但没有任何改变。我通过编程方式创建搜索栏程序。它被插入到一个UIView中,该UIView被添加到MasterViewController的navigationItem.titleView中。 - denvdancsk
我遇到了背景图像的问题,但这也有所帮助。 - denvdancsk

5

我不知道这是苹果故意的还是一个bug,但在navigationController中搜索栏取消按钮似乎不会显示。尝试在将其添加到导航控制器之前先将搜索栏添加到视图中。

UIView *searchBarView = [[UIView alloc] initWithFrame:[searchBar bounds]];
[searchBarView addSubview:searchBar];
self.navigationItem.titleView = searchBarView;

我已经尝试过了,但是没有起作用。所有它做的就是添加一个没有动画的按钮,但它仍然是不可见的。我通过编程方式创建搜索栏,因此没有任何插座可以连接,只有委托被正确地分配,因为委托方法都在工作。 - denvdancsk
1
@kyzer1978,我错过了它在navigationItem中的部分。我更新了我的答案。 - Bot
谢谢。我也试过这种方法,但没有成功。我不认为把它放在导航控制器中是问题所在,因为我的应用程序中有另一个搜索栏在不同的TableViewController上,但它在tableview header中也有同样的问题。 - denvdancsk
1
@kyzer1978,你能否创建一个测试项目并将其上传到某个地方? - Bot
我刚刚弄清楚了。这与我使用的背景图片有关。不过还是谢谢你的帮助。 - denvdancsk

3

我遇到了同样的问题。虽然按钮存在,但titleColor与背景颜色相同。为了解决这个问题,我查找了搜索栏中取消按钮的子视图,并将按钮的标题颜色设置为其他颜色。请注意,在显示取消按钮后才进行此操作,如果在取消按钮显示之前进行操作,则该视图不存在。

我的代码:

        [self.mySearchBar setShowsCancelButton:YES animated:YES];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0) {
            for(id subview in [self.mySearchBar subviews])
            {
                if ([subview isKindOfClass:[UIButton class]]) {
                    [self.cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                    [self.cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];

                }
            }
        } else {
            for(id subview in [[[self.mySearchBar subviews] objectAtIndex:0] subviews])
            {
                if ([subview isKindOfClass:[UIButton class]]) {
                    [self.cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                    [self.cancelButton setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];
                }
            }
        }

请注意,在iOS 7中,取消按钮被埋藏在搜索栏的第一个子视图中。而在iOS 7之前,它是搜索栏的直接子视图。


-1
通过查看以上答案,我无法找到正确的答案。 由于这是一个非常老的问题,但如果有人遇到此问题并且正在使用Storybaord,则在Storybaord中有一个选项可用(即单击UISearchbar,然后转到属性检查器,在选项中查找“显示取消按钮”)。请参考截图{{link1:enter image description here}}。

-1
_searchBar.backgroundImage = <#某种颜色#>; _searchBar.backgroundColor = <#某种颜色#>; // 取消按钮颜色。

-1

这不是一个错误,请确保色调颜色与您的背景颜色可见。在此输入图片描述


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