首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试在导航栏标题视图中处理分段控制开关

尝试在导航栏标题视图中处理分段控制开关
EN

Stack Overflow用户
提问于 2020-04-13 18:38:36
回答 1查看 533关注 0票数 0

我创建了一个分段控件

代码语言:javascript
复制
private let updateSwitch: UISegmentedControl = {
    let sc = UISegmentedControl(items: ["Sign In", "Sign Out"])
    sc.anchor(width: 128, height: 32)
    sc.selectedSegmentIndex = 0
    sc.tintColor = .mainBlue
    sc.backgroundColor = .mainGray
    sc.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
    return sc
}()

然后,我使用以下方法将updateSwitch添加到导航栏中

代码语言:javascript
复制
navigationItem.titleView = updateSwitch

分段控件完全显示得很好,但是每当我选择登录或退出时,选择器代码就不会被执行。

代码语言:javascript
复制
@objc func handleSegmentedControlSwitch(_ segmentedControl: UISegmentedControl) {
    switch(segmentedControl.selectedSegmentIndex) {
        case 0:
            print("Sign In")
        break
        case 1:
            print("Sign Out")
        break
        default:
        break
    }
}

知道我该怎么解决这个问题吗?

附件是工作分段控件的图像。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-13 18:56:00

这是因为您的UISegmentControl声明。

你有两种方法:

1.将其声明为惰性变量

因为懒惰变量中的Self是有效的。

代码语言:javascript
复制
    private lazy var updateSwitch: UISegmentedControl = {
     let sc = UISegmentedControl(items: ["Sign In", "Sign Out"])
     sc.anchor(width: 128, height: 32)
     sc.selectedSegmentIndex = 0
     sc.tintColor = .mainBlue
     sc.backgroundColor = .mainGray
     sc.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
    return sc }()

2.在viewDidLoad中分配操作

代码语言:javascript
复制
    override func viewDidLoad() {
    super.viewDidLoad()
    let segmented = self.updateSwitch
    segmented.addTarget(self, action: #selector(handleSegmentedControlSwitch(_:)), for: .valueChanged)
    navigationItem.titleView = segmented
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61194413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档