IOS分段控制:无法更改选定的段

时间:2017-07-12 22:55:28

标签: ios swift uisegmentedcontrol

我在故事板中创建了一个分段控件,如下所示:

enter image description here

然后我在控件的值发生变化时创建了一个IBAction:

@IBAction func segmentValChanged(_ sender: UISegmentedControl) {
    print("touched")
    if (sender.selectedSegmentIndex == 0) {
        sender.selectedSegmentIndex = 1;
    }
    else{
        sender.selectedSegmentIndex = 0;
    }
}

唯一的问题是永远不会调用此函数! 当我点击笑话(测试版)按钮时,没有任何反应。

但是,当我为控件创建一个IBOutlet并尝试更改viewDidLoad()中的选定细分时,它有效:

segmentedController.selectedSegmentIndex = 1

我知道我可能错过了一些明显的东西,因为我之前从未使用过分段控件。 非常感谢,如果有人能指出这是什么。 干杯!

import UIKit
import Alamofire

class ViewController: UIViewController {

    var currentImage: CurrentImage!

    var parameters: Parameters!

    @IBOutlet weak var segmentedController: UISegmentedControl!


    @IBAction func segmentValChanged(_ sender: UISegmentedControl) {
        print("touched")
        if (sender.selectedSegmentIndex == 0) { // switch to 1
            sender.selectedSegmentIndex = 1;
        }
        else{
            sender.selectedSegmentIndex = 0;
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        segmentedController.selectedSegmentIndex = 1
        self.segmentedController.addTarget(self, action: #selector(segmentValChanged(_:)), for: .valueChanged)
    }
}

这是我右键单击视图时的样子: enter image description here

1 个答案:

答案 0 :(得分:3)

每当我看到它时,它几乎总是同样的问题......如果分段控件被绘制在其父视图的外部,那么它将不会响应分接头。这很可能是您遇到的问题。 (这也可能发生在UIButtons上。)

测试这是否是问题的方法:

  1. 将分段控件的父级clipsToBounds设置为true。如果控件不再显示在屏幕上,则它将被绘制在其父视图之外。 segmentedControl.superview?.clipsToBounds = true

  2. 为分段控件的父级添加边框。如果控制是在边界之外绘制的,那么你就去了。 segmentedControl.superview?.layer.borderWidth = 1

  3. 通过扩展父视图的大小来解决问题,以便在其中绘制控件。

    在旁注中,您的IBAction不正确。当调用值更改操作时,分段控件已更改其值,新段将突出显示。您不必手动执行此操作。这是另一个指示,即您的控件未在其父视图的边界中绘制。