我正在用 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];
}
}
}
这就是我在 swift 的地方
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])
}
它不允许我将 .selected 放在 sender.subviews[e] 的末尾用于 if 语句。
最佳答案
subviews
是一个 AnyObjects 数组,因此您需要先将每个项目转换为 UIControl,然后才能引用其 selected
属性:
for item in control.subviews {
if let subview = item as? UIControl {
if subview.selected {
...
}
}
}
编辑:这可以编译,但在运行时不起作用。在 iOS 8 中,控件的 subview 看起来像是私有(private) UISegment 类的实例,它实际上是 UIImageView 的子类。将每个项目转换到 UIControl 的尝试将无提示地失败。我还没有做你正在尝试的事情,所以不确定为什么这在 iOS 7 中有效。苹果改变了 UISegmentedControl 的构建方式,或者 UIImageView 有一个私有(private)的 selected
属性。我建议您以其他方式实现此效果,这可能意味着构建分段控件的自定义版本。如果您真的想继续使用内部 subview ,请将“UIControl”更改为“UIImageView”并将“if subview.selected...”更改为“if subview.highlighted...”。请记住,这可能不适用于 iOS 7,并且可能会在更高版本的 iOS 中再次中断。
关于ios - 快速更改仅选定片段的色调颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26613190/