1

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

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

コーディングの大部分は同じなので、私の質問は次のとおりです。UITableViewController をプロトコルとして有効にすることは可能ですか、または何らかの方法でお勧めですか?

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

ベストプラクティスに関する彼女の考えに興味がありますか?

4

1 に答える 1

1

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

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

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

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

これらは、私が頭から考えることができるベスト プラクティスです。

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

于 2012-04-15T08:35:48.143 に答える