【问题标题】:iOS: change png in a bar button itemiOS:在条形按钮项中更改 png
【发布时间】:2011-09-03 00:03:08
【问题描述】:

我在工具栏中放了一个条形按钮项目,并用 png (first.png) 设置它,当我按下它时,我想在 "second.png" 中更改它的 png

这段代码不能正常工作:

UIImage *first = [UIImage imageNamed:@"first.png"];
UIImage *second = [UIImage imageNamed:@"second.png"];

if ([sender isSelected]) 
{  
    [sender setImage:first forState:UIControlStateNormal];  
    [sender setSelected:NO];  

}
else 
{     
    [sender setImage:second forState:UIControlStateSelected]; 
    [sender setSelected:YES];

}

【问题讨论】:

    标签: ios xcode png uibarbuttonitem


    【解决方案1】:

    当前的回答者没有意识到UIBarButtonItem 不会从 UIButton 继承,所以setImage:forState: 肯定会工作。 UIBarButtonItems 不能为不同的状态设置。但是,您可以使用这样的东西(在UIBarItem docs 中声明):

    sender.image = [UIImage imageNamed:@"first.png"];
    

    【讨论】:

      【解决方案2】:

      我不清楚为什么你有一个 if 块。您不能将两个状态图像都初始化为一次性初始化步骤吗?即

      [sender setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];  
      [sender setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected]; 
      

      事实上,如果您不需要以编程方式完成,这可能可以在 Interface Builder 中完成。

      【讨论】:

      • 由于未捕获的异常 'NSInvalidArgumentException',我有这个错误正在终止应用程序,原因:'-[UIBarButtonItem setImage:forState:]: unrecognized selector sent to instance 0x6a3cc60'
      • 通常你会在视图控制器的viewDidLoad 中进行这种初始化。你是从什么方法复制你的代码 sn-p 的?
      【解决方案3】:

      在按钮创建后写这行:

      UIImage *first = [UIImage imageNamed:@"first.png"];
      UIImage *second = [UIImage imageNamed:@"second.png"];
      
      [sender setImage:first forState:UIControlStateNormal];
      [sender setImage:second forState:UIControlStateSelected]; 
      

      您不需要 if-else 语句。

      更新:

      CGRect myFrame;
      UIButton *myButton = [[UIButton alloc] initWithFrame:myFrame];
      [myButton setImage:[UIImage imageNamed:@"first.png"] forState:UIControlStateNormal];
      [myButton setImage:[UIImage imageNamed:@"second.png"] forState:UIControlStateSelected];
      UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:myButton];
      [myButton release];
      

      【讨论】:

      • 由于未捕获的异常 'NSInvalidArgumentException',我有这个错误正在终止应用程序,原因:'-[UIBarButtonItem setImage:forState:]: unrecognized selector sent to instance 0x6a3cc60'
      • 只为UIButton 声明不同的状态。使用自定义 view == UIButton 创建 UIBarButtonItem。然后调用这个方法到那个UIButton对象
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      相关资源
      最近更新 更多