UIBarButtonItem: целевое действие, не работающее?

У меня есть пользовательское представление в a UIBarButtonItem, установленный путем вызова -initWithCustomView. Мой прекрасный рендеринг объекта кнопки панели, но когда я касаюсь его, это не вызывает действие с моим целевым объектом.

Вот мой код:

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"someImage.png"]];
UIBarButtonItem *bbItem = [[UIBarButtonItem alloc] initWithCustomView:imageView];
self.navigationItem.leftBarButtonItem = bbItem;
[imageView release];
[bbItem setTarget:self];
[bbItem setAction:@selector(deselectAll)];
76
задан Jacob Relkin 24 July 2013 в 08:33
поделиться

3 ответа

Я не думаю, что цель и действие UIBarButtonItem применимы к настраиваемым представлениям. Попробуйте использовать UIButton вместо UIImageView и применить цель и действие к кнопке.

Пример кода в Swift:

let button  = UIButton(type: .Custom)
if let image = UIImage(named:"icon-menu.png") {
    button.setImage(image, forState: .Normal)
}
button.frame = CGRectMake(0.0, 0.0, 30.0, 30.0)
button.addTarget(self, action: #selector(MyClass.myMethod), forControlEvents: .TouchUpInside)
let barButton = UIBarButtonItem(customView: button)
navigationItem.leftBarButtonItem = barButton
120
ответ дан 24 November 2019 в 11:11
поделиться

Использует ли ваше пользовательское представление события касания или передает их родительскому представлению?

0
ответ дан 24 November 2019 в 11:11
поделиться

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

Можете ли вы убедиться, что ваше действие действительно объявлено

- (void) deselectAll;

, а не

- (void) deselectAll:(id)sender;

Если это последнее, вам нужно будет установить действие @selector (deselectAll:) . (обратите внимание на точку с запятой, чтобы соответствовать объявлению метода)

Кроме того, void может быть IBAction , но это не имеет отношения к вашей проблеме.

1
ответ дан 24 November 2019 в 11:11
поделиться