有没有人设法为UISearchBar的scopebar部分着色,它有一个tintColor属性,但设置它不会影响附加的scopebar UISegmentedControl。我已经在酒吧上设置了色调,但似乎没有工作,即:
for (id subview in searchBar.subviews){
if([subview isMemberOfClass:[UISegmentedControl class]]){
UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
scopeBar.tintColor=UIColorFromRGB(0x990066);
}
}
干杯,尼尔
答案 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)
更改色调颜色以更改范围栏的颜色。注意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
}