2013-07-17 136 views
0

我有一个没有标题或初始背景图像的UIButton。按下后,按钮背景图像会改变,再次按下时,它将被设置为零。现在使用iOS 6.x,该按钮完全消失。这里是我的代码:iOS UIButton在设置背景图像为零后消失

- (IBAction)resetAll: (id) sender { 
[self reset]; 

for (UIView *view in self.view.subviews) { 

    if ([[[view class] description] isEqualToString:@"UIRoundedRectButton"]) { 
     UIButton *theButton = (UIButton *)view;   

     int nTag = theButton.tag; 

     switch (nTag) { 
      case 11: { 
       theButton.tag = 10; 
       [theButton setBackgroundImage:nil forState:UIControlStateNormal]; 
       break; 
      } 
      case 21: { 
       theButton.tag = 20; 
       [theButton setBackgroundImage:nil forState:UIControlStateNormal]; 
       [theButton setEnabled:YES]; 
       break; 
      } 
      case 31: { 
       theButton.tag = 30; 
       [theButton setBackgroundImage:nil forState:UIControlStateNormal]; 
       [theButton setEnabled:YES]; 
       break; 
      } 
      case 41: { 
       theButton.tag = 40; 
       [theButton setBackgroundImage:nil forState:UIControlStateNormal]; 
       [theButton setEnabled:YES]; 
       break; 
      } 
      case 51: { 
       theButton.tag = 50; 
       [theButton setBackgroundImage:nil forState:UIControlStateNormal]; 
       [theButton setEnabled:YES]; 
       break; 
      } 
     } 
    } 
} 
return; 

此代码工作正常:

- (IBAction)ButtonClicked: (id) sender { 
UIButton *btn = (UIButton *)sender; 

// Get the current tag value 
int currentTag = [sender tag]; 

// Toggle the check buttons 
if (currentTag == 10 || currentTag == 20 || currentTag == 30 || currentTag == 40 || currentTag == 50) { 
     [btn setBackgroundImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateNormal]; 
     btn.tag = ++currentTag; 
} 

else 
    if (currentTag == 11 || currentTag == 21 || currentTag == 31 || currentTag == 41 || currentTag == 51) { 
     [btn setBackgroundImage:nil forState:UIControlStateNormal]; 
     btn.tag = --currentTag; 
} 

[self calculate]; 

任何建议或帮助将不胜感激!

回答

1

而不是更改UIControlStateNormal中的按钮的背景图像,而不是改变按钮的状态? 如果您创建的按钮编程,你只需要添加

[btn setBackgroundImage:[UIImage imageNamed:@"check.png"] forState:UIControlStateSelected]; 

然后,按下,当你希望它是箭头图像的行:

[btn setSelected:YES]; 

,并设置它回默认外观:

[btn setSelected:NO]; 

如果您在厦门国际银行所做的按钮,就可以通过改变状态配置所选择的设定状态的图像和设置图像那里。

+0

感谢您的建议。我能解决我的问题。这是完成我想要的更好的方式。 – wyoskibum

0

这是实现DOC答案的最终代码。我设置界面生成器的默认设置,选中状态:

- (IBAction)ButtonClicked: (id) sender { 
UIButton *btn = (UIButton *)sender; 

if ([btn isSelected ]) { 
    [btn setSelected:NO]; 
} else { 
    [btn setSelected:YES]; 
} 

[self calculate]; 
} 


- (IBAction)resetAll: (id) sender { 
[self reset]; 

for (UIView *view in self.view.subviews) { 

    if ([[[view class] description] isEqualToString:@"UIRoundedRectButton"]) { 
     UIButton *theButton = (UIButton *)view;   

     [theButton setSelected:NO]; 

    } 
} 
0

的情况下,只是一个附加的应答(比如我)已经有按钮周围的选定状态逻辑的一个良好的金额(父类提供了状态到基于这个观点)。如果您需要按钮以非选择状态启动图像,并将状态更改为使用无图像进行选择,则可以将生成的空白图像添加到选定状态,如此。

  //Make a stupid blank image because setting to nil on a state doesn't work. 
      UIGraphicsBeginImageContextWithOptions(CGSizeMake(23, 23), NO, 0.0); 
      UIImage *blank = UIGraphicsGetImageFromCurrentImageContext(); 
      UIGraphicsEndImageContext(); 

      UIImage *buttonNonSelectedImage = [UIImage imageNamed:@"video-slomo"]; 
      [self.myButton setBackgroundImage:buttonNonSelectedImage forState:UIControlStateNormal]; 
      [self.mybutton setBackgroundImage:blank forState:UIControlStateSelected]; 
      [self.myButton addTarget:self 
            action:@selector(onMyButtonPress) 
          forControlEvents:UIControlEventTouchUpInside]; 
      self.myButton.titleLabel.font = [UIFont boldSystemFontOfSize:14]; 
      [self.playRateButton setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; 
      [self.view addSubview:self.myButton]; 

然后,在你的按钮动作中,你可以改变状态(在我的情况下添加文本)。

- (void)onMyButtonPress 
{ 
    if (self.myButton.isSelected) { 
     [self.myButton setSelected:NO]; 
    } 
    else { 
     [self.myButton setTitle:@"Selected"] 
           forState:UIControlStateSelected]; 
     [self.myButton setSelected:YES]; 
    } 
} 

接受的答案在大多数情况下起作用,我只需要其他跟踪信息的选定状态。快乐编程。