Возвращать строку при нажатии кнопки в Swift - PullRequest
0 голосов
/ 30 сентября 2019

Есть две кнопки. Роль кнопок состоит в том, чтобы определить, выполнять ли поиск по названию книги или по имени автора при поиске книги.

Я сделал деталь, в которой bookTitleFilterBtn отключается при нажатии authorNameFilterBtn.

var buttons: [UIButton] { return [bookTitleFilterBtn, authorNameFilterBtn] }
override func viewDidLoad() {
        super.viewDidLoad()

        bookTitleFilterBtn.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)
        authorNameFilterBtn.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)
    }
func updateButtonsAppearance(allButtons: [UIButton], selectedButton: UIButton) {
        for button in allButtons {
            let isSelected = button == selectedButton

            let currentTitle = button.currentTitle ?? "-"
            let title = NSAttributedString(string: currentTitle, attributes: [.foregroundColor: isSelected ? UIColor.white : UIColor.black])
            button.setAttributedTitle(title, for: .normal)
            button.setTitleColor(isSelected ? .white : .black, for: .normal)
            button.backgroundColor = isSelected ? .red : .white
            button.isHighlighted = isSelected
        }
    }
@objc func buttonClicked(_ sender: UIButton) {
        DispatchQueue.main.async {
            self.updateButtonsAppearance(allButtons: self.buttons, selectedButton: sender)
        }
    }

Я хочу реализовать то, что «book_title» возвращается при нажатии bookTitleFilterBtn, а «author_name» возвращается при нажатии authorNameFilterBtn.

1 Ответ

2 голосов
/ 30 сентября 2019
  1. Вы можете вернуть любое значение в методе нажатия кнопки, но это не поможет, так как возвращаемое значение вернется в класс UIControl, и вы не сможете получить к нему доступ.

  2. Вы можете установить метку на кнопку, а при нажатии кнопки вы можете сравнить вкладку и определить, какая кнопка нажата. Также вы можете управлять выбранным статусом кнопки, чтобы установить фон. Вот пример кода.

    override func viewDidLoad() {
        super.viewDidLoad()
    
        bookTitleFilterBtn.tag = 1
        bookTitleFilterBtn.setTitleColor(.black, for: .normal)
        bookTitleFilterBtn.setTitleColor(.white, for: .selected)
        bookTitleFilterBtn.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)
    
        authorNameFilterBtn.tag = 2
        authorNameFilterBtn.setTitleColor(.black, for: .normal)
        authorNameFilterBtn.setTitleColor(.white, for: .selected)
        authorNameFilterBtn.addTarget(self, action: #selector(buttonClicked(_:)), for: .touchUpInside)
    }
    
    
    
    
    @objc func buttonClicked(_ sender: UIButton) {
    
        if sender.tag == 1{
            bookTitleFilterBtn.isSelected = true
            authorNameFilterBtn.isSelected = false
        }else{
            bookTitleFilterBtn.isSelected = false
            authorNameFilterBtn.isSelected = true
        }
    }
    
  3. Нет необходимости вызывать updateButtonsAppearance в главном блоке как событие касания по умолчанию в потоке main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...