Программно созданный UIBarButtonItem Not Launching Selector Action - PullRequest
8 голосов
/ 12 июля 2011

Вот мой UIBarButton:

[self.navigationItem setLeftBarButtonItem:[[UIBarButtonItem alloc] 
                            initWithTitle:@"+ Contact" 
                                    style:UIBarButtonItemStylePlain 
                                   target:nil 
                                   action:@selector(showPicker:)] animated:YES];

Вот код, который он должен запустить:

- (void)showPicker:(id)sender {
    ABPeoplePickerNavigationController *picker = 
     [[ABPeoplePickerNavigationController alloc] init];
    picker.peoplePickerDelegate = self;

    [self presentModalViewController:picker animated:YES];
    [picker release];
}

Когда я запускаю приложение и нажимаю на «+ контакт» UIBarButton, ничего не происходит. Никаких ошибок, нада. Я ставлю точку останова, и она никогда не достигает метода, на который ссылается селектор.

Я что-то не так делаю в способе вызова селектора?

Спасибо!

Ответы [ 3 ]

24 голосов
/ 12 июля 2011

В объявлении вашей кнопки что-то отсутствует, а именно параметр target.Попробуйте это:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"+ Contact" 
                                 style:UIBarButtonItemStylePlain 
                                target:self 
                                action:@selector(showPicker:)];
[self.navigationItem setLeftBarButtonItem:item animated:YES];

Предполагается, что showPicker: фактически находится в том же классе, который добавляет кнопку к элементу навигации.

Параметр target является экземпляром, который долженобработать событие.

3 голосов
/ 14 ноября 2012

Для тех, у кого все еще проблемы с этим, вот другое решение, которое я нашел: Вместо этого:

self.myBarButton = 
  [[UIBarButtonItem alloc] initWithTitle:@"Woot Woot"
                                   style:UIBarButtonItemStyleBordered 
                                  target:self 
                                  action:@selector(performActionForButton)];

Попробуйте что-то вроде этого:

NSArray *barButtons = [self.myToolbar items];
UIBarButtonItem *myBarButton = [barButtons objectAtIndex:0];
[myBarButton setAction:@selector(performActionForButton)];

* Убедитесь, что вы добавили это UIBarButtonItem на панели инструментов в раскадровке.(Или вы можете просто программно создать свой собственный UIBarButtonItem перед этим набором кода и добавить его в массив items UIToolbar.)

Каким-то образом ageektrapped Решение не сработало для меня, хотя я бы предпочел использовать его решение.Может быть, кто-то более осведомленный о UIBarButtonItems мог бы прокомментировать, почему одно решение работает над другим?

2 голосов
/ 12 июля 2011

"target" должен быть объектом, к которому принадлежит селектор, вместо nil.

...