Вопрос по uinavigationbar, ios, uibarbuttonitem, objective-c – UIBarButtonItem Пользовательское представление в UINavigationBar

17

Я делаю пользовательские кнопки панели для uinavigationbar, я использую следующий код

 UIImageView *backImgView= [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chk_back.png"]]; [backImgView setUserInteractionEnabled:YES];
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithCustomView:backImgView];
[backButton setTarget:self];
[backButton setAction:@selector(BackBtn)];
checkIn_NavBar.topItem.leftBarButtonItem = backButton;

Проблема в том, что он не называет свои действия. Что я делаю не так?

Могу ли я увидеть на вашем методе BackBtn? Arthur
checkIn_NavBar имеет сильную ссылку, и метод BackBtn не вызывается. Hassy
Что такое checkIn_NavBar? У вас есть сильная ссылка на это? Почему бы не использовать self.navigationItem.leftBarButtonItem? josh-fuggle
попробуйте и используйте [checkIn_NavBar setLeftBarButtonItem: backButton]; или self.navigationItem.leftBarButtonItem = backButton; Bonnie

Ваш Ответ

3   ответа
43

Из документации Apple:

Инициализирует новый элемент, используя указанный пользовательский вид.

- (id)initWithCustomView:(UIView *)customView

Параметры customView Пользовательское представление, представляющее элемент. Возвращаемое значение Вновь инициализированный элемент с указанными свойствами.

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

Решение: "Создать кнопку с фоновым изображением (установить действие для этой кнопки) и кнопку панели инициализации с этой кнопкой ", Например:

UIButton *btn =  [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0,0,25,25)
[btn setBackgroundImage:[UIImage imageNamed:@"chk_back.png"] forState:UIControlStateNormal];
[btn addTarget:self action:@selector(BackBtn) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *barBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
Хороший ответ, но: в документе говорится: «При создании пользовательской кнопкиэто кнопка с типом UIButtonTypeCustom—рамка кнопки изначально установлена на (0, 0, 0, 0). Прежде чем добавить кнопку в ваш интерфейс, вы должны обновить фрейм до более подходящего значения. " Таким образом, вы должны окончательно установить кадр кнопки, иначе вы выигралиничего не вижу! Reinhard Männer
@ ReinhardMänner - ты спас меня, чувак! Кроме того, это ужасное значение по умолчанию для кадра ... katzenhut
Я добавил спецификацию фрейма и сделал его 75х44, который похож на UIBarButtonItem по умолчанию. Сделайте изображение размером 25x25 видимой области, окруженной прозрачностью. Harris
@katzenhut - рад, что я могу вам помочь, и вы совершенно правы относительно значения по умолчанию ... Reinhard Männer
1

Я сделал это, используя следующий код:

UIButton *nxtBtn =  [UIButton buttonWithType:UIButtonTypeCustom];
[nxtBtn setImage:[UIImage imageNamed:@"chk_next.png"] forState:UIControlStateNormal];
[nxtBtn addTarget:self action:@selector(NextBtn) forControlEvents:UIControlEventTouchUpInside];
[nxtBtn setFrame:CGRectMake(0, 0, 64, 31)];
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithCustomView:nxtBtn];

checkIn_NavBar.topItem.rightBarButtonItem=nextButton;
Итак, вы добавляете кнопку на кнопку. Это нене звучит правильно на всех. Popeye
1
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"]
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:self
                                                                   action:@selector(graphButton)];
self.navigationItem.rightBarButtonItem = graphButton;

- (void)graphButton{
}
? Перекрытие? Вы имеете в виду, что в навигационной панели справа уже есть кнопка? brianLikeApple
Да, в любом случае кнопка уже была, спасибо, за помощь Hassy
Результаты в двух перекрывающихся изображениях Hassy
Удалите ваш код и скопируйте мой код и замените имя изображения кнопки. Измените функцию выбора, как вам нравится. Он должен работать! brianLikeApple

Похожие вопросы