ios - 在导航项栏内切换

Posted

技术标签:

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

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

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

【问题讨论】:

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

以上是关于ios - 在导航项栏内切换的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 导航栏内的动画不起作用

每个 ViewController 在标签栏内都有自己的导航栏(iOS)

ios 有导航或者无导航时的动画切换效果

iOS 7 多任务切换器:导航栏出现黑色

Storyboard 应用程序在 iOS 7 上运行正常,但在 iOS 6.1 上导航栏切换视图

iOS设计之 多视图导航栏UINavigationController切换视图的简单设计