ios - 在导航项栏中切换

时间:2018-05-27 16:29:57

标签: ios storyboard uinavigationitem uiswitch

我想在UISwitch内设置UINavigationBar。但是,当我尝试将手指放在开关上并将其拖动到“开关”时,视图没有响应。

这就是我所拥有的。 https://github.com/rchampa/views-within-navigationItem

enter image description here

1 个答案:

答案 0 :(得分:3)

正如上面评论中所述,您的GitHub项目不包含任何数据。然而,如果您以编程方式设置自定义UIBarButtonItem,一切都按预期工作(对我来说似乎更干净):

override func viewDidLoad() {
    super.viewDidLoad()
    setupBarButtonItem()
}

private func setupBarButtonItem() {
    let offLabel = UILabel()
    offLabel.font = UIFont.boldSystemFont(ofSize: UIFont.smallSystemFontSize)
    offLabel.text = "OFF"

    let onLabel = UILabel()
    onLabel.font = UIFont.boldSystemFont(ofSize: UIFont.smallSystemFontSize)
    onLabel.text = "ON"

    let toggle = UISwitch()
    toggle.addTarget(self, action: #selector(toggleValueChanged(_:)), for: .valueChanged)

    let stackView = UIStackView(arrangedSubviews: [offLabel, toggle, onLabel])
    stackView.spacing = 8

    navigationItem.leftBarButtonItem = UIBarButtonItem(customView: stackView)
}

@objc func toggleValueChanged(_ toggle: UISwitch) {
    print("new value: \(toggle.isOn)")
}

example

<强>更新

我也通过故事板工作了。与以编程方式设置相比,您必须将UIStackView嵌入到常规UIView中才能将其添加为故事板中的UIBarButtonItem。然后我从UIStackView到其superview添加了top,leading,bottom和trailing约束(每个约束 0 )。要在设计时删除故事板警告和错误(在运行时它没有任何问题),您必须手动计算并设置包含所有内容所需的外部视图(包含UIStackView)的宽度子视图(offLabel.width + spacing + toggle.width + spacing + onLabel.width)。

storyboard example