2

こんにちは。あなたの助けにアドバイスをありがとうございます。Xcode4でViewControllerを操作しているときに、本当に奇妙な問題が発生します。まず、ストーリーボードを使用しておらず、プログラムでUI要素を作成することを好みます。そこで、UIButtonを設定しました。これを押すと、新しいViewControllerが表示されます。これは私がボタンに使用しているコードです:

-(void)settingsAndExportHandle:(UIButton *)buttonSender {
SettingsViewController* settingView = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
settingView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:settingView animated:YES];

}

このボタンは初期化され、RootViewControllerのviewDidLoadメソッドで割り当てられます。ボタンを押したときに、他のView Controller(この場合はSettingsViewController)に切り替えたい。

奇妙なことに、ボタンを押すと、コントローラーを反転させるアニメーションはうまくいきますが、終了すると、RootViewControllersとまったく同じもの(同じカスタムビュー、同じボタン、すべて同じ!)が得られます。問題は、私が何を見逃しているのかということです。ARC(自動参照カウント)を使用しているため、RootViewControllerで作成したビューとボタンを解放したりロックを解除したりすることはできません。

どんな助けでもありがたいです。皆さん、ありがとうございました!

4

1 に答える 1

0

View Controllerをプッシュしてモーダルに提示しても、それらを提示したView Controllerの割り当ては解除されませ。追加のView Controllerをスタックに追加するだけです。コールバック メソッドを実装して、ユーザーがボタンを押してルート ビュー コントローラーに戻したときに、設定ビュー コントローラーがルート ビュー コントローラーに何が起きようとしているのかを知らせて、作成したメソッドを呼び出すことができるようにする必要があります。インターフェイスを必要な状態にリセットします。も使用できるかもしれませんviewWillAppear:が、それは少し面倒です。

ただし、Apple ヒューマン インターフェイス ガイドラインによると、ユーザーは、ビュー コントローラーをプッシュするかモーダルに表示するときに、使用していたビュー コントローラーが状態を保存し、元に戻ったときとまったく同じ状態になることを期待しています。ナビゲーション コントローラーのコンテキストで状態が保持されない場合、当惑し、迷惑になります。モーダルに表示されている場合は特に厄介です。

これについて考えてみてください - ユーザーは架空のメール アプリを使用しています。メールの入力を開始し、フォント サイズと色を設定します。添付ファイルの追加ボタンをタップすると、画像を選択できるモーダル ビュー コントローラーが表示されます。画像を選択すると、モーダル ビューが閉じられます。あなたの実装では、メール作成インターフェイスがリセットされ、メールの内容がなくなるか、少なくとも選択したフォント サイズと色がデフォルトに戻ります。それは良い経験ではありません。

于 2012-06-10T12:42:41.493 に答える