2011-11-10 3 views
0

私はサブビューを追加したくないのですが、代わりに "self.view"を別のビュー(警告ビュー)に変更してから、ユーザーが警告を抑制した後、私は元に戻したいと思います。これまで私が元のビューに戻ろうとするとき、私は理解できない理由のために空の画面を取得するだけです。ここで UIViewControllerとUITableViewController、self.viewを元に戻してからもう一度変更する方法は?

はあなたのビューを変更したい場合、私は現在、私のUITableViewControllers

//Show warning view controller 
self.warningViewControler = [[[WarningViewController alloc] init] autorelease]; 
self.view = self.warningViewController.view; 


//Then later 
self.view = self.tableView; //<< Dosnt work 
+0

"Dosnt work"とは何ですか?それはあなたにエラーを与えるか、それとも期待した結果を生み出すのではないのですか?また、この方法の陰影の種類ではありませんか? selfViewを再割り当てすると、tableViewは解放され、解放されますか?警告を表示しているのであれば、単にUIAlertViewを使用しないのはなぜですか? –

+0

@pixelchildには、現在のView Controllerに対してWarningViewControllerをモーダル表示するだけではない理由がありますか?それはこれを行う簡単で一貫した方法でしょう。 –

+2

あなたはそれを間違っている、これはiOSのビューアーキテクチャがどのように動作するはずではない、あなたはすべての方法で険しい戦いに直面するだろう。サブビューとして埋め込むか、新しいビューを作成して新しいビューコントローラを作成して、それをユーザに提示する必要があります。 –

答えて

0

の一つであり、元のビューが定義されている場合/ XCodeのにリンク、あなたが自己を変更する前に、それを保持しなければならないものです。別のビューを表示します。そうでない場合、元のビューが解放され、それを使用すると悪いことが起こる可能性があります。

警告:

self.warningViewControler = [[[WarningViewController alloc] init] autorelease]; 
self.view = self.warningViewController.view 

が悪い悪い呼び出しです。あなたはコントローラを自動リリースしますが、あなたはそのビューを使用します。だから、しばらくしてから解放されたコントローラでビューが保持されます。コントローラーを保持し、もう視界が必要ないときはそれを解放してください。ここで

+0

ありがとう、私は本当に悪い習慣だったという気持ちがありました。モーダルビューを使用していなかったのは、ナビゲーションバーとタブバーを表示したかったからです。ただし、サブビューとして挿入しないでください。 – jennas

0

は、私はあなたがやろうとしていると思う何を行うには良い方法です:

[self dismissModalViewControllerAnimated:YES]; 

// or again if this is iOS5.. 

[self dismissModalViewControllerAnimated:YES completion:nil]; 

役に立てば幸い:

WarningViewController *warningViewController = [[WarningViewController alloc] initWithNibName:@"theRightNiborNil" bundle:nil]; 

[self presentModalViewController:warningViewController animated:YES]; 

// or if you don't need to support iOS4 any more: 

[self presentViewController:warningViewController animated:YES completion:nil] 

// and if you aren't using ARC yet, then [warningViewController release]; 

は、その後、あなたのWarningViewControllerであなたが呼び出して何らかのアクションをします。

関連する問題