私は、プログラムで作成した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];
}
あなたが正しいと思います。データを渡していたので変更しました。だから、私がやっているやり方は、それはもはや本当にモーダルな見方でもないと思う。私はデリゲートをセットアップしているので、メインビューコントローラーから行うことはできますか?あなたの最後の行は、私が表示している新しいビューからそれを実行するように見えます。 – Jhorra
これをもっと考えれば、私はモーダルとして扱う代わりにビューを押しているので、データをメインコントローラに渡し、バック関数を手動で呼び出すことができます。 – Jhorra
@Jhorra(理論上は)同じUINavigationControllerを使用する必要があるので、メインビューコントローラまたは新しいビューコントローラから-popViewControllerAnimated:を呼び出すことができます。モーダルビューの場合は、モーダルビューコントローラ(主にメインビューコントローラ)を表示したビューから-dismissModalViewControllerAnimatedを呼び出す必要があります。 –