Как сделать, чтобы кнопка программирования изображения вместо UIBarButtonItem в программировании iphone? - PullRequest
1 голос
/ 30 сентября 2011

Я должен сделать кнопку в UINavigationBar, кнопка должна переключаться между состоянием перезапуска и отмены, и она должна вызвать

   -(void)RestartMethod {}

в состоянии перезапуска и должен вызывать метод

    -(void) cancelMethod {}

в состоянии отмены UIBarButtonItem, оба состояния используют изображения, такие как start.png и calcel.png

Я попытался сделать два изображения и добавить и удалить цели, но столкнулся с некоторыми проблемами с плохим исполнением, как мне это сделать? Помогите!

Ответы [ 4 ]

4 голосов
/ 30 сентября 2011

item1=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"DoneUp3.png"] style:UIBarButtonItemStylePlain target:self action:@selector(action1)]; item2=[[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"Pin.png"] style:UIBarButtonItemStylePlain target:self action:@selector(action2)];

-(void)action1{self.navigationItem.rightBarButtonItem = item2;}
-(void)action2{self.navigationItem.rightBarButtonItem = item1;}
0 голосов
/ 30 сентября 2011

я думаю, что это может вам помочь:

CGRect frameimg = CGRectMake(0, 0, image3.size.width, image3.size.height);
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg];   
[someButton setBackgroundImage:[UIImage imageName:@"start.png"] forState:UIControlStateNormal];
[someButton setBackgroundImage:[UIImage imageName:@"calcel.png"] forState:UIControlStateSelected];
[someButton addTarget:self action:@selector(backButtonPress:)forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem *mailbutton =[[UIBarButtonItem alloc] initWithCustomView:someButton];
self.navigationItem.leftBarButtonItem=mailbutton;
[mailbutton release];

Новая запись назадButtonPress: метод:

        -(void)backButtonPress:(id)sender{
            UIButton *tmpButton = (UIButton *)sender;
               tmpButton.selected = [tmpButton isSelected]?NO:YES;

              if (tmpButton.selected) {
                    // call cancelMethod or write RestartMethod code here
                }
                else{
                    // call RestartMethod or write RestartMethod code here
               }

        }
0 голосов
/ 30 сентября 2011

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

  1. Пусть bool объявит начальное состояние

    Кнопка BOOLOn = NO;

  2. Вставить первую кнопку с исходным изображением, указывающим на один селектор

  3. Внутри селектора действовать на основе этого логического значения. Измените состояние и измените это логическое значение тоже. Не нужно иметь два разных селектора. Вызовите соответствующие функции, чтобы делать вещи внутри этого селектора.
0 голосов
/ 30 сентября 2011

Создайте две кнопки с двумя разными целями. Когда нажата одна кнопка, сделайте то, что хотите, чтобы действие было, и замените кнопку кнопкой номер два. Если нажата кнопка номер два, замените ее кнопкой № 1.

...