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 - 在导航项栏内切换的主要内容,如果未能解决你的问题,请参考以下文章
每个 ViewController 在标签栏内都有自己的导航栏(iOS)