IOS 分段控件:无法更改选定的分段
IOS Segmented Control: Can't Change Selected Segment
我在故事板中创建了一个分段控件,如下所示:
然后我为控件的值更改时创建了一个 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)
}
}
这就是我右键单击视图时的样子:
每当我看到它时,它几乎总是同样的问题...如果分段控件绘制在其父视图外部,那么它将不会响应点击。这很可能是您遇到的问题。 (这也可能发生在 UIButton 上。)
测试这是否是问题所在的方法:
将分段控件的父项的 clipsToBounds
设置为 true。如果控件不再显示在屏幕上,则它被绘制在其父视图之外。 segmentedControl.superview?.clipsToBounds = true
向分段控件的父级添加边框。如果控件被绘制在边界外,那么你就可以了。 segmentedControl.superview?.layer.borderWidth = 1
通过扩大父视图的大小来解决问题,以便在其中绘制控件。
附带说明一下,您的 IBAction 不正确。当值更改操作被调用时,分段控件将已经更改了它的值并且新的段将被突出显示。您不必手动执行此操作。这是另一个指示器,表明您的控件未在其父视图的边界内绘制。
我在故事板中创建了一个分段控件,如下所示:
然后我为控件的值更改时创建了一个 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)
}
}
这就是我右键单击视图时的样子:
每当我看到它时,它几乎总是同样的问题...如果分段控件绘制在其父视图外部,那么它将不会响应点击。这很可能是您遇到的问题。 (这也可能发生在 UIButton 上。)
测试这是否是问题所在的方法:
将分段控件的父项的
clipsToBounds
设置为 true。如果控件不再显示在屏幕上,则它被绘制在其父视图之外。segmentedControl.superview?.clipsToBounds = true
向分段控件的父级添加边框。如果控件被绘制在边界外,那么你就可以了。
segmentedControl.superview?.layer.borderWidth = 1
通过扩大父视图的大小来解决问题,以便在其中绘制控件。
附带说明一下,您的 IBAction 不正确。当值更改操作被调用时,分段控件将已经更改了它的值并且新的段将被突出显示。您不必手动执行此操作。这是另一个指示器,表明您的控件未在其父视图的边界内绘制。