2017-02-14 6 views
1

Я хотел бы иметь кнопку закрытия на каждом контроллере представления, который появляется в стеке навигации. Я прочитал here, что мне нужно создать объект, который является uinavigationdelegate, я думаю, у этого объекта будет такой метод, как didTapCloseButton?Создайте кнопку закрытия для каждого контроллера вида в стеке uinavigationcontroller

Вопросы: Должен ли я создать протокол и сделать все, что подтверждает его, т.е .:

protocol CustomDelegate: UINavigationControllerDelegate { 
    func didTapCloseButton() 
} 

public class ViewController: CustomDelegate { 
    func didTapCloseButton() { 
    //not sure what goes in here? 
    } 
} 

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

Благодарим за помощь!

+0

Я считаю, что вы могли бы быть путают здесь, на самом деле существует протокол UINavigationControllerDelegate [1], реализованный Apple. [1]: https://developer.apple.com/reference/uikit/uinavigationcontrollerdelegate – ff10

+0

позвольте мне отредактировать мое сообщение, чтобы создать пользовательский делегат, который наследуется от UINavigationDelegate. – Number45

ответ

0

Здесь представлено простое решение. Создать UINavigationController подкласс и переопределить pushViewController метод.

class NavigationController: UINavigationController { 
    override func pushViewController(_ viewController: UIViewController, animated: Bool) { 
     super.pushViewController(viewController, animated: animated) 

     let closeBarButtonItem = UIBarButtonItem(
      title: "Close", 
      style: .done, 
      target: self, 
      action: #selector(self.popViewController(animated:))) 

     viewController.navigationItem.rightBarButtonItem = closeBarButtonItem 
    } 
} 
0

Не уверен, если это то, что вы хотели, но вы можете сделать:

protocol CustomDelegate: UINavigationControllerDelegate { 
    func didTapCloseButton() 
} 
extension CustomDelegate where Self : UIViewController{ 
    func didTapCloseButton(){ 
     // write your default implementation for all classes 
    } 

} 

теперь для каждого UIViewController класса у вас есть вы можете просто сделать:

class someViewController: CustomDelegate{ 

    @IBAction buttonClicked (sender: UIButton){ 
    didTapCloseButton() 
    } 
} 
Смежные вопросы