2012-03-21 10 views
1

私は、プログラムで作成した2つのボタンをviewDidLoadメソッドで見ることができます。モーダルウィンドウでは、デリゲートを介してcancelSearchメソッドを呼び出すボタンがあります。 cancelSearchメソッドにブレークポイントを設定すると、ヒットするので、デリゲートが正しく設定されていることがわかりますが、この行が呼び出されても[self dismissViewControllerAnimated:YES completion:nil];実際にはモーダルウィンドウを閉じるわけではありません。モーダルウィンドウが解消されない

以下のコードはすべて私のメインコントローラビューのものです。あなたのビューコントローラがモーダルに提示された場合

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIBarButtonItem *actionButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(showActionMenu:)]; 
    actionButton.style = UIBarButtonItemStyleBordered; 

    UIBarButtonItem *searchButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSearch target:self action:@selector(showSearchMenu:)]; 
    searchButtonItem.style = UIBarButtonItemStyleBordered; 

    UIToolbar* toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 103.0f, 44.01f)]; 
    NSArray* buttons = [NSArray arrayWithObjects:actionButton, searchButtonItem, nil]; 
    [toolbar setItems:buttons animated:NO]; 
    self.navigationItem.title = @"Census Management"; 
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:toolbar]; 


    [[RKClient sharedClient] get:@"censusmanagement" delegate:self]; 
} 

- (IBAction)showActionMenu:(id)sender 
{ 
    [self performSegueWithIdentifier: @"CMActionSegue" sender: self]; 
} 

- (IBAction)showSearchMenu:(id)sender 
{ 
    ehrxCMSearchView *search = [[self storyboard] instantiateViewControllerWithIdentifier:@"cmSearch"]; 
    search.selectedOptions = self.selectedOptions; 

    search.delegate = self; 

    [self.navigationController pushViewController:search animated:YES]; 
} 

- (void)cancelSearch:(ehrxCMSearchView *)controller 
{ 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

答えて

4

あなたに似たものを使用して、モーダルビューを閉じます:これは却下されます

[self dismissModalViewControllerAnimated:YES]; 

次のようなものを使用してロードされたモーダルビュー:

[self presentModalViewController:search animated:YES]; 

ただし、だから私は、あなたはおそらく、むしろそれを解任しようとするよりも、ナビゲーションスタックからビューをポップする必要が

[self.navigationController pushViewController:search animated:YES]; 

:あなたのコードスニペットを見て、検索ビューコントローラは、次の行を使用して、ナビゲーションスタックにプッシュされて表示されますモーダルビューとして:

[self.navigationController popViewControllerAnimated:YES]; 
+0

あなたが正しいと思います。データを渡していたので変更しました。だから、私がやっているやり方は、それはもはや本当にモーダルな見方でもないと思う。私はデリゲートをセットアップしているので、メインビューコントローラーから行うことはできますか?あなたの最後の行は、私が表示している新しいビューからそれを実行するように見えます。 – Jhorra

+0

これをもっと考えれば、私はモーダルとして扱う代わりにビューを押しているので、データをメインコントローラに渡し、バック関数を手動で呼び出すことができます。 – Jhorra

+0

@Jhorra(理論上は)同じUINavigationControllerを使用する必要があるので、メインビューコントローラまたは新しいビューコントローラから-popViewControllerAnimated:を呼び出すことができます。モーダルビューの場合は、モーダルビューコントローラ(主にメインビューコントローラ)を表示したビューから-dismissModalViewControllerAnimatedを呼び出す必要があります。 –

0

、あなたはこれを使用する必要があります。

[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

presentingViewControllerプロパティはiOSの5のみで利用可能です。したがって、古いバージョンのiOSをターゲットにしている場合は、代わりにself.parentViewControllerを使用する必要があります(iOSバージョンごとに適切なものを使用してください)。

ビューコントローラを提示/あなたの親にこの制御を行う場合は、単にこれを呼び出す:

[self dismissModalViewControllerAnimated:YES]; 
+0

デリゲートを使用して他の人が私に言ったことから、好ましい方法です。そのようにしようとしています。私はモーダルコントローラーからメインコントローラーにデータを戻したいからです。 – Jhorra

+0

両方のメソッドは、iOS 6.0で償却されました。 – Zorayr

関連する問題