Модальное окно не закрывается - PullRequest
1 голос
/ 21 марта 2012

У меня есть две программно созданные кнопки, которые вы можете увидеть в моем методе viewDidLoad.В модальном окне у меня есть кнопка, которая вызывает метод cancelSearch через делегата.Когда я помещаю точку останова в мой метод cancelSearch, он срабатывает, поэтому я знаю, что мой делегат настроен правильно, но даже при том, что он вызывает эту строку [self dismissViewControllerAnimated: YES завершение: 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];
}

Ответы [ 2 ]

4 голосов
/ 21 марта 2012

Вы бы отклонили модальное представление, используя что-то похожее на:

[self dismissModalViewControllerAnimated:YES];

При этом будет отклонено модальное представление, которое было загружено с использованием чего-то похожего на:

[self presentModalViewController:search animated:YES];

Однако, глядя на ваш фрагмент кода, кажется, что контроллер представления поиска помещается в стек навигации с помощью следующей строки:

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

Итак, вам, вероятно, нужно вытолкнуть представление из стека навигации, а не пытаться отклонить его как модальное представление:

[self.navigationController popViewControllerAnimated:YES];
0 голосов
/ 21 марта 2012

Если ваш контроллер представления представлен модально, вы должны использовать это:

[self.presentingViewController dismissModalViewControllerAnimated:YES];

Свойство presentingViewController доступно только в iOS 5.Таким образом, если вы ориентируетесь на более старые версии iOS, вы должны вместо этого использовать self.parentViewController (используйте соответствующий для каждой версии iOS, вы должны справиться с этим).

Если вы сделаете этот элемент управления в своемродительский / представительный контроллер представления, затем просто вызовите это:

[self dismissModalViewControllerAnimated:YES];
...