定制UISearchBarIconClear为UIControlStateHighlighted不起

2019-08-16 19:06发布

我有一个我已经设置了UiControlStateNormal定制UISearchBarIconClear一个UISearchBar。

[mySearchBar setImage:myImage forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];

这部分的工作,因为它应该只可惜攻清除按钮时,从我设置图像的变化,原来的默认的灰色之一。

我已经尝试设置图像UIControlStateHighlighted,但显然这是行不通的。

该文件实际上规定

有效状态为UIControlStateNormal和UIControlStateDisabled。

什么是设置自定义按钮的默认状态,如果你不能将其设置为高亮显示状态的呢? 我缺少的东西吗? 任何想法或变通感谢,谢谢!

Answer 1:

今天早一点在同样的问题来了,这是我真正丑陋的解决方法,我可能不会用我自己。

for(UIView *subView in searchBar.subviews) {
    if([subView isKindOfClass: [UITextField class]]){
        UITextField *searchField = (UITextField *)subView;
        CGFloat myWidth = 26.0f;
        CGFloat myHeight = 30.0f;
        UIButton *myButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, myWidth, myHeight)];
        [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateNormal];
        [myButton setImage:[UIImage imageNamed:@"searchbariconclear"] forState:UIControlStateHighlighted];

        [myButton addTarget:self action:@selector(clearsearchbar) forControlEvents:UIControlEventTouchUpInside];

        searchField.rightView = myButton;
        searchField.rightViewMode = UITextFieldViewModeAlways;
        searchField.clearButtonMode = UITextFieldViewModeNever;
    }
}

然后..

- (void)clearsearchbar {
    for(UIView *subView in searchBar.subviews) {
        if([subView isKindOfClass: [UITextField class]]){
            UITextField *searchField = (UITextField *)subView;
            searchField.text = nil;
        }
    }
}

三个问题这种方法..

  1. 由于我们的搜索栏的子视图里面四处它可以打破一些一天OS更新。

  2. 这并不完全一样UISearchBarIconClear,在清澈的图标将始终可见。你可能会尝试使用这种方法与其他UITextFieldViewModes测试,我没有这主要是因为,据我所知没有其他人将是理想这里,出于某种原因或其他。

  3. 也许这只是我,但我真的不觉得这事试图解决一个时引入了两个问题,一个解决方案。 :-)

如果任何人有解决这个问题的一个更好的方法,我很乐意听到它。



Answer 2:

我有同样的问题,并调整语句的顺序解决它:

因此,而不是做的UIControlStateNormal第一则UIControlStateHighlighted ,首先为突出显示状态的图像

[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateHighlighted];
[searchBar setImage:clearIcon forSearchBarIcon:UISearchBarIconClear state:UIControlStateNormal];


Answer 3:

如何使用代理的外观?

[[UIButton appearanceWhenContainedIn:[UITextField class], [UISearchBar class], nil] setImage:myImage forState:UIControlStateHighlighted];


Answer 4:

当你用清晰的图标在被按压时正在重置为默认的图标说明我有同样的问题。

这似乎我试图使用相同的UIImage对正常和高亮状态,切换到不同图像的聚焦状态固定的问题是因。



文章来源: customizing UISearchBarIconClear for UIControlStateHighlighted does not work