添加图像后 UIButtonTypeCustom 不再起作用

Posted

技术标签:

【中文标题】添加图像后 UIButtonTypeCustom 不再起作用【英文标题】:UIButtonTypeCustom no longer works after the addition of an image 【发布时间】:2012-11-12 13:34:21 【问题描述】:

我有一个按钮,里面有一个图像,当我按下按钮时,我想要一个弹出窗口。当按钮为空,内部没有图像时,一切正常,我现在添加了图像,按钮不再起作用。 Button 对应于 IBAction,并通过 IBOutlet 连接到 XIB。我能做什么?

 - (void)viewDidLoad
       
      //.....
      self.myButton = [UIButton buttonWithType:UIButtonTypeCustom];

     if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)

        self.myButton.frame = CGRectMake(160, 502, 73, 33);
       [self.myButton setImage:[UIImage imageNamed:@"iphone_legenda.png"] 
                                           forState:UIControlStateNormal];
        self.myButton.contentMode = UIViewContentModeScaleToFill;

     else

       self.myButton.frame = CGRectMake(330, 917, 182, 68);
       [self.myButton setImage:[UIImage imageNamed:@"ipad_legenda.png"] 
                                         forState:UIControlStateNormal];
       self.myButton.contentMode = UIViewContentModeScaleToFill;
     


 [self.view addSubview:self.myButton]; 
 /*The problem arose in this line, without addSubview the image  you could not see 
  but the button worked, added addSuview the image you see but the button does not 
  work anymore*/

  NSLog(@"The button is %@", self.myButton);

 /*The button is <UIButton: 0x80f1e90; frame = (330 917; 182 68); opaque = NO; 
  layer = <CALayer: 0x80f1210>>*/

     //.......

 

 -(IBAction)pressedButton:(id)sender
      //This method initially worked
 

【问题讨论】:

所以 myButton 是一个 IBOutlet 并且您已将它连接到界面生成器中的 UIButton?你为什么在这里再次初始化它? self.myButton = [UIButton buttonWithType:UIButtonTypeCustom]; 【参考方案1】:

如果该按钮已在 XIB 中定义,则您的代码将创建另一个不附加任何事件 (IBAction) 的不同按钮。

您可以将代码更改为:

- (void)viewDidLoad
      
  //.....

 if(UI_USER_INTERFACE_IDIOM()== UIUserInterfaceIdiomPhone)

    self.myButton.frame = CGRectMake(160, 502, 73, 33);
   [self.myButton setImage:[UIImage imageNamed:@"iphone_legenda.png"] 
                                       forState:UIControlStateNormal];
    self.myButton.contentMode = UIViewContentModeScaleToFill;

 else

   self.myButton.frame = CGRectMake(330, 917, 182, 68);
   [self.myButton setImage:[UIImage imageNamed:@"ipad_legenda.png"] 
                                     forState:UIControlStateNormal];
   self.myButton.contentMode = UIViewContentModeScaleToFill;
 


其他选项是有两个 XIB。一个用于 iPad,另一个用于 iPhone。

【讨论】:

以上是关于添加图像后 UIButtonTypeCustom 不再起作用的主要内容,如果未能解决你的问题,请参考以下文章

切换按钮图像

UIButton 的剪辑图像

如何更改多个按钮图像和条件

带有图像的自定义 UIButton

使用普通/高亮图像创建自定义 UIButton

如何为 UIButtonTypeCustom 实现 tintcolor 行为