0

編集:受け入れられた答えは私のニーズを満たすものですが、私はまださまざまなアプローチが可能です。コントローラをiOSでしか表示できないようにする方法はありますか(macOSでも可能でしょうか)?

私はこの質問を思いついた。私はコントローラーを持っていて、私はそのコントローラーをプレゼン可能にしたいだけです。一部のコントローラがプッシュしようとした場合、または他のセグを表示しようとすると、アプリケーションはそれを表示しません。例をあげてみましょう:

class OnlyPresentableController : UIViewController{ 

    ///imagine a variable like this exists. 
    override var isOnlyPresentable : Bool{ 
     return true 
    } 
    //........ 
} 


class SomeController : UIViewController{ 

    //..... 

    @IBAction func aButtonClick(_ sender: UIButton) { 

     let controller = OnlyPresentableController(nibName: "OnlyPresentableController", bundle: Bundle.main) 

     //this will work 
     present(controller, animated: true, completion: nil) 
    } 
    @IBAction func anOtherButtonClick(_ sender: UIButton) { 

     let controller = OnlyPresentableController(nibName: "OnlyPresentableController", bundle: Bundle.main) 

     //this will not work because controller is an only presentable one. 
     navigationController?.pushViewController(controller, animated: true) 
    } 

} 

あなたはどう思いますか?これは実装可能ですか?

答えて

1

私はプッシュを防ぐことを考えています。スウィズルを使ってpushViewControllerの機能をスウィズルすることができます。だからswizzles関数では、ビューコントローラがOnlyPresentableControllerのインスタンスであるかどうかをチェックし、何もしない場合は、プッシュすることができます。

注:メソッドスウィズルに関してあなたが知っていると仮定しています。

+0

うーん...私のニーズを満たすことができます。しかし、この状況における私の特定のコードは、フレームワークの一部になるでしょう。スウィズルを使用することは、あらゆるプロジェクトのあらゆるコードのあらゆる状況において安全ですか? –

+1

あなたのプロジェクトで誰も気付かずに残念なことにスウィズルをすることなく解決できない問題がある場合、スウィズルは特に危険です。フレームワークの一部であれば問題ありません。 –

関連する問題