IOS 分段控制 : Can't Change Selected Segment

标签 ios swift uisegmentedcontrol

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

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)
    }
}

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

最佳答案

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

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

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

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

通过扩大父 View 的大小来解决问题,以便在其中绘制控件。


附带说明一下,您的 IBAction 不正确。当值更改操作被调用时,分段控件将已经更改了它的值并且新的段将被突出显示。您不必手动执行此操作。这是另一个指示器,表明您的控件未在其父 View 的边界内绘制。

关于IOS 分段控制 : Can't Change Selected Segment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45068772/

相关文章:

ios - 为什么主视图在 WatchKit 应用程序上变得可滚动?

ios - Xcode8/SDK iOS 10.2 设备、配置文件和代码签名问题

ios - 如何用另一个图像填充 UIImageView?

swift - 如何访问案例的切换结果?

与 Objective C 相比,Swift SHA256 加密返回不同的加密字符串

objective-c - 将 UISegmentedControlNoSegment 指定为 UISegmentedControl 的 selectedSegmentIndex 对 iOS 13 没有影响

ios - 无法使用 'taskCreated' 类型的参数列表调用 '([String : String?])'

swift - 解析... query.getObjectInBackgroundWithId

localization - UISegmentedControl 和本地化

导航栏中的 iOS 分段控件