UISearchBAR scopeBar tintColor

时间:2009-11-02 12:37:06

标签: uisearchbar

有没有人设法为UISearchBar的scopebar部分着色,它有一个tintColor属性,但设置它不会影响附加的scopebar UISegmentedControl。我已经在酒吧上设置了色调,但似乎没有工作,即:

for (id subview in searchBar.subviews){
  if([subview isMemberOfClass:[UISegmentedControl class]]){
     UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
    scopeBar.tintColor=UIColorFromRGB(0x990066);
 }
}

干杯,尼尔

8 个答案:

答案 0 :(得分:9)

上述方法对我不起作用,我最终使用iOS外观方法。

[[UISegmentedControl appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];

答案 1 :(得分:7)

这很有趣,结果显示范围栏是一个有点自定义的分段控件。

从文档:UISegmentedControl仅在分段控件的样式为UISegmentedControlStyleBar时才使用此属性。

现在,范围栏分段控件看起来像,就像UISegmentedControlStyleBar一样,但不是,它是一些未记录的样式:

NSLog(@"scope bar style is %d", scopeBar.segmentedControlStyle);
> scope bar style is 7

你可以尝试这个,它确实设置了色调,但它看起来像屁股:

[scopeBar setSegmentedControlStyle:UISegmentedControlStyleBar];
[scopeBar setTintColor: UIColorFromRGB(0x990066)];
> scope bar style is 2

在内部有一些影响这个的实例变量:_segementedControlFlags.style和_barStyle但你不能破解那些,除非你绕过认可的API。

最好的做法是与Apple合作,并希望他们在未来版本中加入修复。

答案 2 :(得分:4)

这是其他人正在讨论的一些复制粘贴友好代码。

scopeBar.segmentedControlStyle = UISegmentedControlStyleBar; //required for color change
for (id subview in self.searchDisplayController.searchBar.subviews )
{
    if([subview isMemberOfClass:[UISegmentedControl class]])
    {
        UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
        scopeBar.tintColor =  [UIColor blackColor];         
    }
}

如果您的按钮周围有白色方框区域,则可以通过界面构建​​器更改颜色。

我不会像其他人那样说它看起来像“屁股”,但它也不是很理想。

答案 3 :(得分:1)

只需执行以下操作即可更改ScopeBar的色调颜色:

以下代码位于C#(Xamarin)

SearchController.SearchBar.TintColor = UIColor.Green;

答案 4 :(得分:0)

能够为范围栏可靠地设置色调。

我最终做的是更改搜索栏的tintColor ... UNTIL转换到搜索模式,此时我将其设置为与范围栏匹配的默认颜色。然后,当取消搜索时,我将其更改回来。

我似乎在这里遗漏的一个地方是点击相应的tableView时发生的转换,导致搜索栏失去第一响应者状态。在这种情况下,颜色不会改变。原因:我在点击搜索栏的取消按钮时将颜色更改为基础。

Knee-jerk反应:searchBarCancelButtonClicked:应该被调用(其中我们改回颜色)......但这不可能是正确的,因为没有点击取消。我真的需要一种“搜索完成”类型的检测。也许只关注第一响应者并看看 UISearchBar 何时进出该状态?

答案 5 :(得分:0)

此问题的另一个创可贴解决方案(以及一个不太复杂的问题)是你可以在搜索栏和范围栏的顶部添加一个半透明的UIImageView,并将UIImageView的背景颜色更改为所需的色调颜色

答案 6 :(得分:0)

enter image description here

更改色调颜色以更改范围栏的颜色。注意BarTintColor是不同的 - 这将改变搜索栏的颜色..

答案 7 :(得分:0)

此解决方案在Swift中,可以适应objective-c。您可以使用以下功能

找到分段控制视图
func findSegmentedControl(view : UIView) -> UIView? {
    for v in view.subviews {
        if v is UISegmentedControl {
            print(v)
            return v
        } else {
            if let found = findSegmentedControl(view : v) {
                return found
            }
        }
    }
    return nil
}

然后设置视图的色调。调用此函数将是这样的:

if let segmentedView = findSegmentedControl(view: searchController.searchBar) {                
            segmentedView.tintColor = UIColor.white
        }