【问题标题】:ios - switch within navigation item barios - 在导航项栏内切换
【发布时间】:2018-05-27 16:29:56
【问题描述】:

我想在UINavigationBar 中设置UISwitch。但是当我尝试将手指放在开关上并拖动它以“开关”打开和关闭时,视图没有响应。

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

【问题讨论】:

  • Github 项目中没有任何内容,它是一个空视图控制器,没有嵌入任何导航控制器
  • @SandeepBhandari 没错。我刚刚上传了一个简单的演示。我已经更新了描述。不是逻辑问题,是观点问题。你跑了吗?
  • @Ricardo 运行了吗?你的 github 演示项目是blank。它没有导航栏,没有开关,什么都没有。这是一个空窗。你忘记提交和推送实际项目了吗?
  • 对不起。我忘记了推送提交。无论如何,我已经解决了我的问题。
  • 酷,你是怎么解决的?视图是否关闭了用户交互? (那将是我的猜测。)

标签: ios storyboard uinavigationitem uiswitch


【解决方案1】:

正如上面的 cmets 中所述,您的 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)")
}

更新:

我也通过故事板使它工作。与以编程方式设置相比,您必须将UIStackView 嵌入到常规UIView 中,才能将其作为UIBarButtonItem 添加到情节提要中。然后我从UIStackView 向其父视图添加了顶部、前导、底部和尾随约束(每个都有一个常量0)。要在设计时消除情节提要的警告和错误(在运行时它可以正常工作),您必须手动计算并设置外部视图(包含UIStackView)的宽度,以将其包含在内子视图 (offLabel.width + spacing + toggle.width + spacing + onLabel.width)。

【讨论】:

  • 太棒了。同时,如果知道 OP 的故事板配置出了什么问题,还是很高兴的。
  • 当然。在这种情况下,具有显式配置的项目会有所帮助。 :)
  • 您是如何设法将 View 添加到 Bar 按钮项的? Xcode 10 不允许我将视图拖放到条形按钮项中。
  • 这很奇怪@DávidPásztor,因为 Xcode 10 允许我...实际上您不必将它放入条形按钮项,而是放入导航栏(没有条形按钮项)。
  • 很高兴我能帮上忙,@DávidPásztor :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
相关资源
最近更新 更多