добавление UIButton в UIView или UINavigationBar не работает - PullRequest
1 голос
/ 08 февраля 2012

Я пытаюсь добавить UIButton в UINavigationBar со следующим:

 UIButton * addSource = [UIButton buttonWithType:UIButtonTypeCustom];
    [addSource setBackgroundImage:[UIImage imageNamed:@"addsource.png"] forState:UIControlStateNormal];  
    [addSource addTarget: self action:@selector(addSourceButton:) forControlEvents:UIControlEventTouchUpInside]; 
    [addSource setFrame: CGRectMake(115, 5, 32, 32)];  
    [navBar addSubview:addSource];
    [addSource release];

Однако это не работает, вы понимаете?Когда я комментирую setBackgroundImage и меняю его на setBackgroundColor, я вижу его, но не могу щелкнуть по нему (то есть: действие, в котором он установлен, не запускается).Любая идея?Изменение его на UIImageView вместо UIButton также работает, я вижу изображение очень хорошо, так что это проясняет, что изображение там.

Ответы [ 4 ]

1 голос
/ 08 февраля 2012

Вы не можете добавить UIButton к UINavigationBar. Используйте UIBarButtonItem.

Из документов Apple:

В отличие от других типов представлений, Вы не добавляете подпредставления на панель навигации напрямую. Вместо этого вы используете элемент навигации (экземпляр класса UINavigationItem) для укажите, какие кнопки или пользовательские представления вы хотите отобразить.

и

Элемент панели кнопок - это кнопка, предназначенная для размещения на панели инструментов UIToolbar. или UINavigationBar объект. Он наследует основное поведение кнопки от своего абстрактный суперкласс, UIBarItem. UIBarButtonItem определяет дополнительные методы и свойства инициализации для использования на панелях инструментов и навигационные панели.

0 голосов
/ 12 июля 2013

Если вы хотите добавить что-то в центре на панели навигации, почему бы вам просто не сделать

navbar.titleView = addSource
0 голосов
/ 08 февраля 2012

Вы должны использовать элемент UIBarButton, вот код:

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissView)];
    self.navigationItem.leftBarButtonItem = cancelButton;
    [cancelButton release];
0 голосов
/ 08 февраля 2012

”Добавление содержимого на панель навигации

Когда вы используете панель навигации в качестве отдельного объекта, вы несете ответственность за предоставление ее содержимого.В отличие от других типов представлений, вы не добавляете подпредставления непосредственно на панель навигации.Вместо этого вы используете элемент навигации (экземпляр класса UINavigationItem), чтобы указать, какие кнопки или пользовательские представления вы хотите отобразить.У элемента навигации есть свойства для указания представлений слева, справа и в центре панели навигации, а также для указания пользовательской строки приглашения.

Панель навигации управляет стеком объектов UINavigationItem.Хотя стек предназначен в основном для поддержки контроллеров навигации, вы также можете использовать его для реализации собственного пользовательского интерфейса навигации.Самый верхний элемент в стеке представляет элемент навигации, содержимое которого в настоящее время отображается на панели навигации.Вы помещаете новые элементы навигации в стек, используя метод pushNavigationItem: animated: и извлекаете элементы из стека, используя метод popNavigationItemAnimated:.Оба эти изменения могут быть анимированы для удобства пользователя.

В дополнение к выталкиванию и извлечению элементов, вы также можете установить содержимое, которое вы также можете использовать в стеке, напрямую используя свойство items или setItems.: animated: метод.Вы можете использовать эти методы во время запуска, чтобы восстановить интерфейс до прежнего состояния или одновременно нажать или выдвинуть более одного элемента навигации.

Если вы используете панель навигации в качестве отдельного объекта, вам следуетназначьте пользовательский объект делегата свойству делегата и используйте этот объект для перехвата сообщений, поступающих с панели навигации.Делегированные объекты должны соответствовать протоколу UINavigationBarDelegate.Уведомления делегатов позволяют отслеживать, когда элементы навигации выталкиваются или извлекаются из стека.Вы будете использовать эти уведомления для обновления остальной части пользовательского интерфейса вашего приложения.

Для получения дополнительной информации о создании элементов навигации см. Справочник по классам UINavigationItem.Для получения дополнительной информации о реализации объекта делегата см. Ссылку протокола UINavigationBarDelegate. "

из ссылки на класс UiNavigationBar.

пожалуйста, также обратитесь к UIBarButoonItem - (id) initWithCustomView: (UIView *) view.UIbutton является подклассом uiview

и также ссылается на свойство rightBarButtonItem uinavbaritem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...