2012-04-15 5 views
0

私のコアデータモデルとやりとりするアプリケーション用のUITableViewControllerを構築しました。主な目的は、ナビゲーションコントローラにプッシュされ、エンティティのリストを表示し、編集/選択して情報などをドリルダウンできるようにすることです。プロトコルのためのUIViewControllerの使用

しかし、私のアプリのどこか他の場所で、これらのエンティティの1つを選択する単純なピッカーを表示します。私は、これを実装する最善の方法は、ユーザーがエンティティなどをキャンセルしたかどうかについて、代理人にメッセージを送り返すことができるピッカーを処理するプロトコルを構築することだと考えています...

コーディングの多くは、同じ、私の質問はこれです:それは可能です/または任意の方法では、プロトコルとしてUITableViewControllerを有効にすることをお勧めですか?

正常に表示されたとき、現在のように(UIViewControllerの標準サブクラス)動作しますが、デリゲートによってモーダルに表示され、デリゲートにメッセージを渡すこともできますか?

ベストプラクティスについての彼女の考えにかわいいですか?

答えて

1

正式なプロトコルは必要ありません。あなたのUITableViewControllerを@property (nonatomic, assign) id delegateに他のコントローラからインスタンス化するときに与えてください。それをデリゲートとして設定します。あなたのクラスをあまりにも強く結びつけたり、デリゲートを保持したりしないようにするには、idを使用してください。

呼び出し側コントローラにdidCancelPicking...:(id)senderdidPick...:(id)sender item:(id)pickedItemの2つのメソッドを実装します。

これで、UITableViewControllerをモーダル表示すると、2つのことを行う必要があります。キャンセルボタンを押して+(didCancelPicking...)に反応し、おそらくtableView:didSelectRowAtIndexPath:を変更してdidPick...をデリゲートに送ります。デリゲートは常にrespondsToSelector:でテストし、その場合はperformSelector:withObject:でテストしてください。これらのデリゲートメソッドでは常に、送信者を最初の引数として配置します。

また、モーダルコントローラを呼び出しているクラスから常に表示および非表示にします。たとえば、UINavigationControllerから自分自身を削除しないでください。

これは私の帽子の上から考えることができるベストプラクティスです。

ここでの特定のコードの再利用について:コードをあまりにも乱雑にするかどうか、そのUITableViewControllerを再利用し、モーダルで表示されたときの動作を変更する必要があるかどうかを判断する必要があります。例えば。あとで編集やドリルダウンをしたくない場合があります。もちろん、これは常にif (self.delegate)のチェックでカプセル化できますが、

関連する問題