Не могу обработать события UIBarButtonItem

У меня есть UIImageView, который я добавляю в качестве фона UIBarButtonItem, Я делаю UIBarButtonItem как правильный barbuttonitem моего контроллера навигации. Я не в состоянии справиться с UIBarButtonItem событие click, поскольку элемент управления не вводит метод, пока я отлаживаю. Что может быть причиной этого?

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,32,32)];
    [myImage setImage:[UIImage imageNamed:@"logo.png"]];
    UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:myImage];
    //rightBarButton.target = self;
    //rightBarButton.action = @selector(onMyMethod);
    if(isRight){
        self.navigationItem.rightBarButtonItem = rightBarButton;
        self.navigationItem.rightBarButtonItem.target = self;
        self.navigationItem.rightBarButtonItem.action = @selector(onMyMethod);
    }

3 ответа

Решение

Исходя из ответа RIP, я изменил UIBarButtonItem и создал UIButton вместо этого и добавил его как подпредставление навигационного контроллера

        UIImage *image = [UIImage imageNamed:@"logo.png"];

        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        [button setBackgroundImage:image forState:UIControlStateNormal];

        [button addTarget:self action:@selector(onMyMethod:)  forControlEvents:UIControlEventTouchUpInside];
        CGRect frame = CGRectMake(260.0, 7.0, 32.0, 32.0);
        button.frame = frame;
        [button setBackgroundImage:image forState:UIControlStateNormal];
        [self.navigationController.navigationBar addSubview:button];

Я думаю, что цель и действие не будут работать при использовании initWithCustomView UIBarButton, поэтому вы можете использовать что-то вроде

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,32,32)];
[myImage setImage:[UIImage imageNamed:@"logo.png"]];

UIButton* rightButton = [UIButton buttonWithType: UIButtonTypeInfoLight];
[rightButton addTarget:self 
                action:@selector(onMyMethod:) 
      forControlEvents:UIControlEventTouchDown];


UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:rightButton];

Отредактируйте ваш код:

UIImageView *myImage = [[UIImageView alloc] initWithFrame:CGRectMake(0,0,32,32)];
myImage. userInteractionEnabled = Yes;
[myImage setImage:[UIImage imageNamed:@"logo.png"]];
UIBarButtonItem *rightBarButton = [[UIBarButtonItem alloc] initWithCustomView:myImage];

if(isRight)
{
    self.navigationItem.rightBarButtonItem = rightBarButton;
    self.navigationItem.rightBarButtonItem.target = self;
    self.navigationItem.rightBarButtonItem.action = @selector(onMyMethod:);
}

Попробуйте это Спасибо:)

Другие вопросы по тегам