Синтаксис обработчика кнопок для увольнения ViewController в IOS

Я создал пользовательский UIBarButton в коде, чтобы отклонить пользовательский viewController. Однако компилятору не нравится мой синтаксис.

Вот код для создания UIBarButtonItem:

//grab VC
detailC* detailVC = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"detailVC"]; //This custom VC
is a sub-class of UIViewController

//Create barbuttonitem
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]
                                    initWithImage:[UIImage imageNamed:@"close.png]
                                    style:UIBarButtonItemStylePlain
                                    target:self
                                   action:@selector(dismss:detailVC)];//ERROR HERE

//Here is the dismiss method: 
-(void) dismissVC: (UIViewController*) vc {

  [vc dismissViewControllerAnimated:YES completion:nil];
}

Ошибка от компилятора: 'Expected :'

Есть возможность исправить insert :, Если я выбираю исправление, он меняет селектор на:

action:@selector(dismissVC: controller:)];

что не имеет смысла, а также дает предупреждение 'Undeclared Selector"

Что я делаю неправильно?

Примечание: это происходит в appDelegate, поэтому я не могу использовать self, чтобы закрыть VC.

1 ответ

Решение

То, что вы пытаетесь сделать, в корне неверно. Единственный действительный параметр, который ваш dismissVC: Метод может взять это UIBarButtonItem что вызвало действие. Вы не можете передать контроллер представления этому методу.

Но вам не нужно. Так как вы хотите отклонить "себя", просто позвоните dismissViewController на self,

//Create barbuttonitem
UIBarButtonItem *leftButton = [[UIBarButtonItem alloc]
                                initWithImage:[UIImage imageNamed:@"close.png"]
                                style:UIBarButtonItemStylePlain
                                target:self
                                action:@selector(dismiss:)];

Вот обновленный метод:

- (void)dismiss:(UIBarButtonItem *)button {
    [self dismissViewControllerAnimated:YES completion:nil];
}
Другие вопросы по тегам