ios - 快速更改仅选定片段的色调颜色

标签 ios swift uisegmentedcontrol

我正在用 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/

相关文章:

ios - MultiFactor 在 Firebase Auth 中意味着什么

ios - SpriteKit : Weird crash when preloading texture atlases

ios - 如何用swift添加一个圆形按钮?

ios - 滑动页面 View Controller 时,段 Controller 的选定段应该更改

swift - 如何防止一个 UIView 被另一个 UIView 隐藏?

iphone - UISegmentedControl:ValueChanged 处理程序上的 EXC_BAD_ACCESS

ios - 如何转换 NSUerdefaults AnyObject?到 SWIFT 阵列,以便我可以附加到它?

iphone - 如何为通用应用程序使用默认启动画面?

ios - 为什么UIViewController中有一个navigationItem?

ios - 某些 iOS 4.2 设备会提前关闭 WiFi?