在可可中以编程方式更改按钮的背景图像

时间:2015-05-20 13:32:40

标签: objective-c cocoa nsbutton

我搜索过的所有主题在Obj-c中都已过时或未完成。

我需要学习如何在InterfaceBuilder中使用实际按钮时以编程方式更改按钮的背景图像。 (这听起来很奇怪,但我需要它NSCollectionView,因为我有许多类似的按钮和不同的背景图像。)

在界面构建器中,我将一个按钮拖到我的视图窗口,我该怎么办?

我理解:

  • 我需要创建一个NSButton类
  • 将界面构建器中的按钮连接到代码
  • 设置图片
有人可以帮帮我吗?我一直在努力解决这个问题。

3 个答案:

答案 0 :(得分:2)

您是否已将按钮连接到IBOutlet属性?如果是这样,那么你需要做的就是使用[button setImage:]

如果您还没有这样做,请确保您要更改图像的对象实例位于界面构建器中,即已将其作为其中一个蓝色框放入。然后,如果您设置了对象的类并在头文件中有一个IBOutlet属性,您只需将outlet按钮中的按钮插座(看起来像一个箭头)拖动到实际按钮本身即可链接两个

编辑:所以您似乎在按钮的实际连接部分出现问题?有可能你的IB文件看起来有点像这样:

enter image description here

在左侧列表中查找对象部分。这些是您可以将按钮连接到代码中的实际对象。您可能会在其中看到应用程序委托对象,该对象包含在首次创建项目时生成的默认IB文件中。如果要在应用程序委托中处理图像更改,只需将此属性添加到AppDelegate.h文件以创建插座:

@property IBOutlet NSButton *button;

如果您返回界面构建器并选择应用委托对象,则可以在插座选项卡下看到刚刚创建的插座:

enter image description here

将小圆圈的东西拖到按钮上进行连接,这应该是最简单的一点。

但我只是假设你想从你的应用代表以外的其他地方调用它,为此我们需要做更多的解释。如果要从中调用它的类是NSView的子类,并且已经在您的界面构建器中,则只需将该行添加到视图的头文件中,它就会出现在查看此插座标签。

如果你想从另一个不是视图的对象中调用它,你需要做两个选择:

  1. 在界面构建器中创建对象实例。这意味着您不必使用alloc] init];等正常创建,而是必须实际将对象拖入界面构建器。这可能会更改对象的结构,因为您无法再随意创建它,因为无论何时加载.nib文件,它都会自动实例化。另外需要注意的是,您的init功能将不再被调用,您需要使用awakeFromNib代替。如果您选择沿着这条路线行驶,只需拖动一个物体:
  2. enter image description here

    将您的outlet属性添加到头文件中:

    enter image description here

    设置对象的类:

    enter image description here

    连接插座:

    enter image description here

    1. 如果加载对象XIB不是你的事情,你可以随时将属性插座连接到你的app delegate / view控制器并从中访问它。如果这是你遇到的问题,希望这可以解决问题。

答案 1 :(得分:2)

对于iOS:

不需要创建NSButton子类。

您只需在Storyboard上添加按钮,设置按钮的IBOutlet属性(ctr +从按钮拖动到视图控制器),然后设置背景图像:

[myButton setBackgroundImage:[UIImage imageNamed:@"ImageName"] forState:UIControlStateNormal]

对于MacOS:

您可以使用

setImage:

Apple Doc上描述,并更改其大小/位置

(抱歉我的英语不好)

答案 2 :(得分:1)

作为Duukee Said的话,我认为不需要手动创建任何NSButton或UIButton实例当我们在Interface Builder中有一个对象时,我们可以按如下方式使用它的插座,

UIImage* Desired_Image=[UIImage imageNamed:@"yourimage.png"];
[My_Button setimage:Desired_Image forState:UIcontrolstateNormal];

HTH!快乐编码:)