如何在iphone编程中切换图像按钮而不是UIBarButtonItem?

时间:2011-09-30 06:25:12

标签: iphone objective-c uinavigationbar uibarbuttonitem

我必须在UINavigationBar中创建一个按钮,按钮应该在重启状态和取消状态之间切换,它应该调用

   -(void)RestartMethod {}

在重启状态下应该调用方法

    -(void) cancelMethod {}

在UIBarButtonItem的取消状态下,两个州都在使用像start.png和calcel.png这样的图像

我尝试制作两张图片并添加和删除目标,但是面对一些不好的问题, 我该怎么做? 救命啊!

4 个答案:

答案 0 :(得分:4)

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;}

答案 1 :(得分:0)

创建两个具有两个不同目标的按钮。单击一个按钮时,执行您想要的操作,并使用第二个按钮替换按钮。如果单击第二个按钮,则将其替换为按钮编号1。

答案 2 :(得分:0)

为什么不使用分段控件而不是切换按钮?即使您坚持使用单个按钮进行切换,这也是我实现它的方式。

  1. 让bool声明初始状态

    BOOL buttonOn = NO;

  2. 嵌入第一个按钮,初始图像指向一个选择器

  3. 内部选择器根据此布尔值执行操作。更改状态并更改此布尔值。无需两个不同的选择器。调用适当的函数在此选择器中执行操作。

答案 3 :(得分:0)

我认为这可以帮到你:             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];

New write backButtonPress: method:
-(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
       }

}