ios - переключаться в панели элементов навигации - PullRequest
0 голосов
/ 27 мая 2018

Я хочу установить UISwitch в пределах UINavigationBar.Но когда я пытаюсь положить палец на переключатель и перетащить его, чтобы «включить» и выключить, изображение не отвечает.

Это то, что у меня есть.https://github.com/rchampa/views-within-navigationItem

enter image description here

1 Ответ

0 голосов
/ 27 мая 2018

Как уже говорилось в комментариях выше, ваш проект 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 в раскадровку.Затем я добавил верхний, ведущий, нижний и конечный ограничения (каждое с константой 0 ) из UIStackView в его суперпредставление.Чтобы избавиться от предупреждений и ошибок раскадровки во время разработки (во время выполнения это работает без каких-либо проблем), вы должны вручную вычислить и установить ширину для внешнего вида (который содержит UIStackView), который необходим, чтобы заключить все этоподпредставления (offLabel.width + spacing + toggle.width + spacing + onLabel.width).

storyboard example

...