5

これは、Appleのアプリケーション全体で使用されているパッテンのようです。新しいレコードの作成は、続行するには保存またはキャンセルする必要があるモーダルビューを介して実行され、レコードの編集は、ナビゲーションスタックにプッシュされたビューを介して実行されます。

基本的に、「追加」と「編集」のためにViewControllerを複製するのは正しくないようですが、プッシュされたViewControllerとモーダルViewControllerの動作にはいくつかの違いがあり、複雑になります。

両方の拠点をカバーできるように、これをどのように行う必要がありますか?

-

違いは次のとおりです。

スタックにプッシュすると、ナビゲーションバーがビューの上部に表示され、キャンセル/保存ボタンを含めるように構成できます。モーダルで表示される場合はそうではないため、インターフェイスを複製するには、ツールバーを個別に作成し、代わりに閉じる/保存ボタンを追加する必要があります。

プッシュされたビューを閉じる[self.navigationController popViewControllerAnimated:YES];ときはナビゲーションコントローラーにメッセージを送信し、モーダルビューを閉じるときは自分自身にメッセージを送信します[self dismissModalViewControllerAnimated:YES];

4

1 に答える 1

0

InterfaceBuilderでUIToolbarを追加し、self.navigationControllerがnilでない場合は、viewDidLoadで非表示にすることができます。

却下に関しては、次のようなものがあります。

- (void)didCancel {
    [self.navigationController popViewControllerAnimated:YES] || [self dismissModalViewControllerAnimated:YES];
}

ビューコントローラがナビゲーションコントロールの一部である場合、これは短絡し、それ以外の場合はdismissModalViewControllerAnimatedを使用します。

これはキャンセルボタンで機能するはずです。保存ボタンの場合、次のようなある種のデリゲートメソッドを呼び出すと便利です。

- (void)didSave {
    // do your saving juju here
    if([self.delegate respondsToSelector:@selector(viewController:didSave:]) {
        [self.delegate viewController:self didSave:whatJustGotSaved];
    }
    [self.navigationController popViewControllerAnimated:YES]; // noop if currently modal
}

デリゲートの実装では、次のように記述できます。

- (void)viewController:(UIViewController*)viewController didSave:(NSObject*)whatJustGotSaved {
    // do stuff with parameters
    [self.modalViewController dismissModalViewControllerAnimated:YES]; // noop if not modal
}
于 2012-04-27T12:32:23.567 に答える