我正在使用objective-c重新执行我的一个项目,我在objective-C中使用了一个我无法正确翻译的函数。
这是Objective-C代码
- (void)segmentAction:(UISegmentedControl *)sender
{
NSLog(@"Segment");
for (int e=0; e<[sender.subviews count]; e++) {
if ([[sender.subviews objectAtIndex:e]isSelected]) {
[[sender.subviews objectAtIndex:e] setTintColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"gradient.png"]]];
} else {
[[sender.subviews objectAtIndex:e] setTintColor:nil];
}
}
}
这就是我在快速的地方
func segChanged(sender: UISegmentedControl) {
println("Value Changed")
var e:Int = 0
var countOfSeg = sender.subviews.count
for (e=0; e < countOfSeg; e++) {
}
print(sender.subviews[e])
}
它不允许我在 sender.subviews [e] 的末尾为if语句添加 .selected 。
答案 0 :(得分:1)
subviews
是AnyObjects的数组,因此在引用其selected
属性之前,您需要将每个项目转换为UIControl:
for item in control.subviews {
if let subview = item as? UIControl {
if subview.selected {
...
}
}
}
编辑:这是编译,但在运行时不起作用。在iOS 8中,控件的子视图看起来像是私有UISegment类的实例,它实际上是UIImageView的子类。将每个项目强制转换为UIControl的尝试将无声地失败。我还没有完成你正在尝试的东西,因此不确定为什么这在iOS 7中有效。要么Apple改变了UISegmentedControl的构建方式,要么UIImageView具有私有selected
属性。我建议您以其他方式实现此效果,这可能意味着构建分段控件的自定义版本。如果您真的想继续使用内部子视图,请更改&#34; UIControl&#34;到&#34; UIImageView&#34;并更改&#34;如果是subview.selected ...&#34; to&#34;如果是subview.highlighted ......&#34;。请记住,这可能不适用于iOS 7,并且可能会在更高版本的iOS中再次出现。
答案 1 :(得分:0)
尝试以下代码
let sortedViews = segmentedControl.subviews.sort( { $0.frame.origin.x < $1.frame.origin.x } )
for (index, view) in sortedViews.enumerate() {
if index == segmentedControl.selectedSegmentIndex {
view.tintColor = UIColor(red: 17/255, green: 125/255, blue: 185/255, alpha: 1)
} else {
view.tintColor = UIColor.blackColor()
}
}
答案 2 :(得分:0)
这对我有用。试试这个:)
self.segmentcontrol.selectionStyle = .box;
self.segmentcontrol.selectionIndicatorBoxColor = UIColor.blue
要使选择指示器颜色与框颜色相同,请执行此操作。
self.segmentcontrol.selectionIndicatorColor = UIColor.blue
答案 3 :(得分:0)
雨燕5的更新版本 让sortedViews = sender.subviews.sorted(作者:{$ 0.frame.origin.x <$ 1.frame.origin.x})
for (index, view) in sortedViews.enumerated() {
if index == sender.selectedSegmentIndex {
view.tintColor = UIColor.blue //UIColor.blueColor()
} else {
view.tintColor = UIColor.white
}
}