現在、iOS アプリケーションで問題が発生しています。
段階的なログイン パターンを取り入れようとしています。つまり、ユーザーはログインを必要とせずにアプリの一部にアクセスできます。
必要な機能は次のとおりです。
- ユーザーはいつでも、ログインが必要なすべてのナビゲーション項目を表示できます
- ユーザーがログインが必要な uiview(controller) にアクセスしようとすると、ログインを求める UIAlertView が表示されます (できれば、開始されたセグエの宛先が制限されていることをアプリが認識したときに、UIAlertView が表示されることをお勧めします)。
最初に、指定された初期化子 (initWithCoder) で NSUserDefaults をチェックして、ユーザーがログインしているかどうかを確認する UIViewController のサブクラスを使用しました。その後、それをサブクラス化しました。制限事項は次のとおりです。
- UIViewController の他のサブクラス、つまり UITableViewController を使用できませんでした
- ビューが表示された後に UIAlertView が表示されましたが、サブクラス化された UIViewController がユーザーがログインしていると想定した場合、エラーが発生すると想定しています。
質問の概要:
ユーザーが特定の UIView(Controller) および UIViewController のサブクラスにアクセスすることを条件付きで防止する方法を知りたいです。
Update 1
カテゴリやプロトコルは実行可能な解決策になるでしょうか?
Update 2
CodaFi は、ユーザーの状態を管理する優れたソリューションとしてシングルトンを指摘しました。
これを実装したら、ユーザーのアクセスを制御する方法を理解する必要があります。
私はストーリーボードを使用しているので、最も用途の広い実装は UIStoryboardSegue をサブクラス化することであり、ユーザーが制限された UIViewController にアクセスしようとしているかどうかを実行メソッドで確認します (おそらく制限されたコントローラーには、必要なステータスを指定するプロトコル プロパティがあります: ログイン/アウト)。ただし、ここでの落とし穴は、ストーリーボード グラフィック エディターで UIStoryboardSegue のクラス/サブクラスを選択できないことです。私はプログラムでそれを行うことができることを認識していますが、IBActions を追加し、セグエを実行するメソッドにそのようなものを追加する必要があるため、退屈に思えます。
ユーザーのナビゲーションを制限するための実行可能な解決策はありますか?
更新 3
この質問に回答を追加しましたが、私が書いた回答ではナビゲーション バー コントローラー間のセグエが考慮されていないため、未回答と見なします。ただし、一部の人には役立つ場合があります。