仅更改swift中所选段的色调颜色

时间:2014-10-28 16:12:41

标签: 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];
        }
    }
}

这就是我在快速的地方

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

4 个答案:

答案 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
        }
    }