2013-07-31 2 views
6

Я пытаюсь настроить панель навигации, добавив пользовательскую кнопку вправоBarButtonItem. Создание одного довольно прямолинейно.Добавление действия и целевого объекта в пользовательскую панель навигации BarButtonItem?

UIImage *myImage = [UIImage imageNamed:@"menu-icon.png"]; 

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[myButton setFrame:CGRectMake(0, 0, myImage.size.width, myImage.size.height)]; 
[myButton setBackgroundImage:myImage forState:UIControlStateNormal]; 

UIBarButtonItem *myButtonItem = [[UIBarButtonItem alloc] initWithCustomView:myButton]; 

[navItem setLeftBarButtonItem:myButtonItem animated:YES]; 

Выглядит хорошо, за исключением того, что теперь я не могу установить свойства цели или действия. Следующий код ничего не делает:

myButtonItem.target = myTarget; 
myButtonItem.action = @selector(myButtonAction); 

я обнаружил, что причина, это не работает, потому что я инициализирован UIBarButtonItem с -initWithCustomView. Документация яблок говорит:

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

Я немного смущен тем, что именно означает яблоко. Должен ли я создавать пользовательский элемент управления или что-то еще? Я еще этого не сделал, и я не знаю, с чего начать.

Есть ли у кого-нибудь предложения по тому, как это сделать или альтернативный способ настройки пользовательской кнопки панели навигации?

ОТВЕТНЫЙ -------------------------------------------- --------------

Просто пришлось добавить этот метод к UIButton:

[myButton addTarget:myTarget action:@selector(myButtonAction) forControlEvents:UIControlEventTouchUpInside]; 

ответ

6

Это довольно прямолинейно, вам нужно добавить цель для uibutton не для uibarbuttonitem.

Чтобы объяснить больше, что вы хотите для uibarbuttonitem, ответьте, коснитесь внутри метода действий, поскольку документация говорит, что вам нужно сделать это для uibutton, поскольку вы инициализируете свой uibarbuttonitem пользовательским представлением в вашем случае uibutton.

+0

Спасибо, не понял, что все было так просто. – DJSK

4

Добавить действие и цель к UIButton, как это:

[myButton addTarget:self 
      action:@selector(handleMyButtonTap) 
    forControlEvents:UIControlEventTouchUpInside];

Добавить действие и цель в UIBarButtonItem следующим образом:

[myBarButtonItem setAction:@selector(handleBarButtonTap)]; 
[myBarButtonItem setTarget:aTarget];
+0

Он не работает с myButtonItem, но когда я добавил его в myButton, это сработало! Благодаря! – DJSK

0

С помощью ответов по hgwhittle и Мустафа я реализовал, и она работает идеальный здесь полный надрез может помочь кому-то

 //Create ImageButton 
     UIImage *shareBtnIcon = [UIImage imageNamed:@"dummy_share_icon_22"]; 

     UIButton *shareButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
     [shareButton setFrame:CGRectMake(0, 0, shareBtnIcon.size.width, shareBtnIcon.size.height)]; 
     [shareButton setBackgroundImage:shareBtnIcon forState:UIControlStateNormal]; 

     [shareButton addTarget:self action:@selector(shareButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

     //Create BarButton using ImageButton 
     UIBarButtonItem *shareBarBtn = [[UIBarButtonItem alloc] initWithCustomView:shareButton]; 

     //Add BarButton to NavigationBar 
     self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects:shareBarBtn, nil]; 

//method for share butto click 
-(void) shareButtonClicked:(UIButton*)sender 
{ 
    NSLog(@"you clicked on share button %ld"); 
} 
Смежные вопросы