Создание заголовка навигационной панели кнопкой (Swift) - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь сделать заголовок панели навигации своей собственной кнопкой.Пользователи в моем приложении могут иметь несколько профилей, а в заголовке навигационной панели отображается имя пользователя выбранного в данный момент профиля.Нажатие на эту кнопку должно вызвать список доступных профилей для выбора (handleShowProfiles).По какой-то причине заголовок отображается, но не функционирует как кнопка, это просто статический текст, и прикосновение к нему ничего не дает.

let changeProfileContainer : UIView = {
    let container = UIView()
    container.frame = CGRect(x: 0, y: 0, width: 200, height: 40)

    let button = UIButton(type: .custom)
    button.setTitle("@username ▼", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.frame = container.frame
    button.addTarget(self, action: #selector(handleShowProfiles), for: .touchUpInside)

    container.addSubview(button)
    return container
}()

func configureNavBar() {
    self.navigationController?.navigationBar.tintColor = .black
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "send"), style: .plain, target: self, action: #selector(handleSubmitPost))
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: #imageLiteral(resourceName: "drafts"), style: .plain, target: self, action: #selector(handleDrafts))
    self.navigationItem.titleView = changeProfileContainer
}

Есть идеи, почему часть кнопки не будет работать?В документации Apple говорится, что вы должны поместить кнопку в представление, настроить тип кнопки и изменить рамку кнопки по умолчанию (0, 0, 0, 0).Я почти уверен, что здесь я все испортил, но не знаю.

1 Ответ

1 голос
/ 19 марта 2019

Связано с самостоятельными вызовами в вычисляемом свойстве - см. Последнюю часть ответа Ахмада Ф.

Не знаю почему, но селекторы в вычисляемых свойствах, похоже, не работают.

Я попытался добавить представление контейнера, не вычисляя его, и нажатие на кнопку работает.

func configureNavBar() {
    self.navigationController?.navigationBar.tintColor = .black
    let container = UIView()
    container.frame = CGRect(x: 0, y: 0, width: 200, height: 40)

    let button = UIButton(type: .custom)
    button.setTitle("@username ▼", for: .normal)
    button.setTitleColor(.black, for: .normal)
    button.frame = container.frame
    button.addTarget(self, action: #selector(pressTitle), for: .touchUpInside)
    container.addSubview(button)
    navigationItem.titleView = container
}
...