UIBarButtonItem Пользовательский вид в UINavigationBar
Я создаю пользовательские кнопки для панели 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;
Проблема в том, что он не вызывает свое действие. Что я делаю неправильно?
Ответы
Ответ 1
Из документации 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];
Ответ 2
UIBarButtonItem *graphButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"GraphButton.png"]
style:UIBarButtonItemStyleBordered
target:self
action:@selector(graphButton)];
self.navigationItem.rightBarButtonItem = graphButton;
- (void)graphButton{
}
Ответ 3
Я выполнил это, используя следующий код:
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;