分段控制,更改色调不透明度,但不更改边框

时间:2016-10-07 08:07:20

标签: ios swift uisegmentedcontrol

Swift中,如何更改所选索引的色调不透明度,而不是整个控件的边框?

这会改变整个控件的颜色和不透明度:

sessionTypeSegmentedControl.tintColor = UIColor(red: 140/255, green: 140/255, blue: 140/255, alpha: 0.1)

接下来我尝试了:

sessionTypeSegmentedControl.layer.borderColor = UIColor(red: 0/255, green: 0/255, blue: 0/255, alpha: 1.0).cgColor

但这对边界没有影响。

编辑:

我想更改此图片中显示的蓝色背景颜色不透明度。在最左边。

http://i.stack.imgur.com/GgUwN.png

所以预期的结果是:

http://imgur.com/a/AIRhO

2 个答案:

答案 0 :(得分:3)

我找到了这个解决方案...... Swift 3 Xcode 8

    @IBAction func valueChanged(_ sender: UISegmentedControl) {

    for (index,element) in segment.subviews.enumerated() {

        if index != sender.selectedSegmentIndex {
            element.tintColor = UIColor.red
            element.alpha = 0.5
        }else {

            element.tintColor = UIColor.red
            element.alpha = 1

        }
    }



}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    for (index,element) in segment.subviews.enumerated() {

        if index != segment.selectedSegmentIndex {
            element.tintColor = UIColor.red
            element.alpha = 0.5
        }else {

            element.tintColor = UIColor.red
            element.alpha = 1

        }
    }

            segment.layer.cornerRadius = 5
            segment.layer.borderColor = UIColor.black.cgColor
            segment.layer.borderWidth = 1
            segment.clipsToBounds = true



}

enter image description here

答案 1 :(得分:1)

这段代码对我有用。

Swift3示例代码

override func viewDidLoad() {
    super.viewDidLoad()
    segmentedControl.tintColor = UIColor.black
    segmentedControl.layer.cornerRadius = 5
    segmentedControl.clipsToBounds = true
    segmentedControl.layer.borderColor = UIColor.black.cgColor
    segmentedControl.layer.borderWidth = 1
}

@IBAction func valueChanged(_ sender: UISegmentedControl) {
    for indx in 0 ... sender.subviews.count-1 {
        let subview = sender.subviews[indx]
        if indx != sender.selectedSegmentIndex {
            subview.tintColor = UIColor.red.withAlphaComponent(0.5)
            subview.backgroundColor = UIColor.red.withAlphaComponent(0.5)
        } else {
            subview.tintColor = nil
            subview.backgroundColor = nil
        }
    }
}

enter image description here 这是我在Obj-C中使用的代码,但是我还不知道如何在Swift3中的子视图上调用isSelected。

的Objective-C

-(void)valueChanged {
    for (int i=0; i<[self.subviews count]; i++)
    {
        if ([[self.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && [[self.subviews objectAtIndex:i]isSelected])
        {
            [[self.subviews objectAtIndex:i] setTintColor:ORANGE_COLOR];
            [[self.subviews objectAtIndex:i] setBackgroundColor:ORANGE_COLOR];

        }
        if ([[self.subviews objectAtIndex:i] respondsToSelector:@selector(isSelected)] && ![[self.subviews objectAtIndex:i] isSelected])
        {
            [[self.subviews objectAtIndex:i] setTintColor:LIGHT_BLUE_COLOR];
            [[self.subviews objectAtIndex:i] setBackgroundColor:LIGHT_BLUE_COLOR];

        }
    }
}
相关问题