Добавление массива UIButtons к navigationItem.rightBarButtonItem приводит к NSInvalidArgumentException
Я пытаюсь добавить массив из двух кнопок справа от панели навигации, но я получаю исключение, когда запускаю код.
'NSInvalidArgumentException', причина: '- [UIButton isSystemItem]: непризнанный селектор, отправленный в экземпляр
Мой код довольно прост:
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,45)];
label.backgroundColor=[UIColor clearColor];
label.text = @"Test 2 Buttons";
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
button1.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f);
UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
button2.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f);
NSArray *rightBarButtons = [[NSArray alloc] initWithObjects:button2, button1, nil];
UINavigationItem* navItem = self.navigationItem;
navItem.titleView = label;
navItem.rightBarButtonItems = rightBarButtons;
[rightBarButtons release];
[label release];
Я запускаю его на симуляторе iPhone 5.0.
Есть идеи??
Заранее спасибо.
Аль
Ответы
Ответ 1
Вы не можете напрямую добавить UIButtons
. Сначала вам нужно обернуть их как UIBarButtonItems
- предупреждение о компиляторе отсутствует, поскольку вы передаете массив только.
Создайте элементы панели с помощью initWithCustomView:
, перейдя в свою кнопку как пользовательское представление. Или, в зависимости от того, что находится в ваших кнопках, создайте элементы панели.
Ответ 2
Трюк здесь заключается в использовании объектов UIBarButtonItem вместо объектов UIButton. UIBarButtonItems могут быть созданы из UIButton, например:
UIBarButtonItem *myItem = [[UIBarButtonItem alloc] initWithCustomView:uibuttonObject];
Однако использование UIButtons на панели навигации, как правило, плохое, когда UIBarButtonItems должны выглядеть красиво. Рассмотрите возможность посещения Справочника класса UIBarButtonItem.
Ответ 3
Вы должны дать ему массив объектов UIBarButtonItem, а не объекты UIButton. Обратите внимание: UIBarButtonItem не наследует ни UIButton, ни UIView.