UIButton с несколькими целевыми действиями для одного и того же события - PullRequest
0 голосов
/ 21 мая 2019

Могу ли я добавить несколько целевых действий на UIButton для одного и того же события, как показано ниже?

[button addTarget:self action:@selector(xxx) forControlEvents:UIControlEventTouchUpInside];
[button addTarget:object action:@selector(yyy) forControlEvents:UIControlEventTouchUpInside];

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

Я хочу знать, является ли это хорошей практикой, а также порядок выполнения всегда останется прежним?

Заранее спасибо.

Редактировать: Я нашел это post , в котором говорится, что она вызывается в обратном порядке добавления, т. Е. Самая последняя добавленная цель вызывается первой.Но это не подтверждено

1 Ответ

1 голос
/ 21 мая 2019

Да, к кнопке можно добавить несколько действий.

лично я бы предпочел, чтобы делегат подписался на кнопку. Позвольте object, который вы хотите добавить как target, подписаться на метод делегата, чтобы он мог получать события, когда вы нажимаете кнопку.

или

Одно действие, которое перенаправляет событие другим методам для полного контроля

Простой тест в быстром

import UIKit

class ViewController: UIViewController {

  override func viewDidLoad() {
      super.viewDidLoad()
      // Do any additional setup after loading the view.

      let button = UIButton(frame: CGRect(x: 50, y: 50, width: 300, height: 30))
      button.backgroundColor = .orange
      button.addTarget(self, action: #selector(action1), for: .touchUpInside)
      button.addTarget(self, action: #selector(action2), for: .touchUpInside)
      button.addTarget(self, action: #selector(actionHandler), for: .touchUpInside)
      self.view.addSubview(button)
  }

  @objc func actionHandler(_ sender: UIButton){
      print("actionHandler")
      action1(sender)
      action2(sender)
  }

  @objc func action1(_ sender: UIButton) {
      print("action1")
  }

  @objc func action2(_ sender: UIButton) {
      print("action2 \n")
  }
}

Вывод после одного клика:

action1
action2 

actionHandler
action1
action2 

Можете ли вы подтвердить порядок выполнения при обычном добавлении действий

Да, это выполняется в том порядке, в котором вы устанавливаете цели.

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