2015-04-23 1 views
4

У меня проблема с использованием цепочки ответчиков в быстром режиме.Цепочка ответчика в Swift (нулевая цель в мишени UIButton)

Когда я кнопки настроить таргетинг, используя нулевую цель, как:

someButton.addTarget(nil, action:"addButtonTapped:", forControlEvents: .TouchUpInside) 

Действие будет посылать вверх по цепочке ответчик, пока действие не обрабатывается в контроллере. Пока что так хорошо :-)

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

Заранее спасибо за любую помощь :-)

ответ

2

Один из моих коллег дал мне намек воссоздавать селектор и отправить его снова вручную.

let selector = Selector("someButtonTapped:") 
let target: AnyObject? = self.nextResponder()?.targetForAction(selector, withSender: button) 
UIApplication.sharedApplication().sendAction(selector, to: target, from: self, forEvent: nil) 

Это воссоздает цепь ответчика и передает новое сообщение следующему ответчику.

Я надеюсь, что кто-то найдет это полезным.

+1

Не было того, что я искал, но я не понимал, что вы можете создать селектор таким образом. Что решает другую проблему, с которой я столкнулся: Динамические селекторы: 'let selector = Selector (" \ (nameOfButton) ButtonTapped: ")' Спасибо! – djv

0

Я хотел показать другой контроллер представления после отклонения текущего. Контроллер контейнера MyContainerViewController имеет функцию открытия другого контроллера вида. Используя цепочку ответчиков, чтобы представить другой контроллер представлений после отклонения текущего, избегайте необходимости поддерживать ссылки или выполнять родительский контроллер представления. Это особенно удобно при использовании большого количества вложенных контроллеров представления дочерних элементов и контейнеров.

class SomeChildViewController: UIViewController { 
    @IBAction func closeAndShowSomething(sender: Any?) {} 
     let showSelector = #selector(MyContainerViewController.showSomething(_:)) 
     let viewController: Any? = next?.target(forAction: showSelector, withSender: nil) 
     dismiss(animated: true) { 
      UIApplication.shared.sendAction(showSelector, to: viewController, from: self, for: nil) 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^