2017-02-14 10 views
1

ナビゲーションスタックに表示される各ビューコントローラに閉じるボタンが必要です。私はuinavigationdelegateであるオブジェクトを作成する必要があるhereを読みました。このオブジェクトは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() 
    } 
} 
関連する問題