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

问题描述 投票:0回答:3

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

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

在界面构建器中,将按钮拖动到视图窗口中,之后该怎么办?

我了解:

  • 我需要创建一个NSButton类
  • 将按钮从界面构建器连接到代码
  • 设置图像

我一直在为此苦苦挣扎。

objective-c cocoa nsbutton
3个回答
2
投票
如果尚未这样做,请确保要从中更改图像的对象实例位于界面生成器中,即已作为这些蓝色框之一放入其中。然后,如果您设置对象的类并在头文件中具有IBOutlet属性,则只需将“出口”选项卡中的按钮出口(看起来像箭头)拖动到实际按钮本身即可将两者链接在一起

编辑:看来您在使用按钮的实际连接部分时遇到麻烦了吗?您的IB文件很有可能看起来像这样:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9VSGN5bi5wbmcifQ==” alt =“在此处输入图像描述”>“ >>

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

@property IBOutlet NSButton *button;

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

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS8zclpoSS5wbmcifQ==” alt =“在此处输入图像说明”>“ >>

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

但是我假设您想从应用程序委托以外的其他地方调用它,为此,我们需要做更多的解释。如果要从中调用的类是NSView的子类,并且

已经在界面生成器中

,则只需将该行添加到视图的头文件中,它将显示在视图的“出口”选项卡下。

如果要从不是视图或类似视图的另一个对象中调用它,则需要执行两个选择之一:

在界面构建器中创建对象实例。这意味着您不必实际使用alloc] init];等进行创建,而必须将对象实际拖入界面生成器中。因为您将不再能够随意创建对象,所以这会改变对象的结构,因为只要您加载.nib文件,它就会自动实例化。还要注意的重要一点是,将不再调用init函数,而需要使用awakeFromNib。如果您确实选择沿着这条路线走,只需将一个对象拖到上方即可:

    << img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9BdDVsZi5wbmcifQ==” alt =“在此处输入图像描述”>
  1. 将插座属性添加到头文件:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9PMzAzVy5wbmcifQ==” alt =“在此处输入图像描述”>

设置对象的类:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS96UmRLdS5wbmcifQ==” alt =“在此处输入图像描述”>

并连接插座:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS93NnRQUi5wbmcifQ==” alt =“在此处输入图像描述”>

如果只让XIB加载对象不是您的事,您始终可以仅将属性出口连接到您的应用程序委托/视图控制器,然后从中访问它。希望这可以解决问题,如果这是您遇到的问题。

  1. 对于iOS:
    不需要创建NSButton子类。

    您只需要在情节提要上添加按钮,设置按钮的IBOutlet属性(将按钮的ctr +拖动到视图控制器中,并使用以下背景设置背景图像:

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

    对于MacOS:
    您可以使用

    setImage:

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

    (对不起我的英语不好)

    当然,正如Duukee Said所说,我认为不需要手动创建任何NSButton或UIButton实例,当Interface Builder中有一个对象时,我们可以按如下方式使用它的插座,
    UIImage* Desired_Image=[UIImage imageNamed:@"yourimage.png"]; [My_Button setimage:Desired_Image forState:UIcontrolstateNormal];

    HTH!快乐编码:)


1
投票

1
投票
© www.soinside.com 2019 - 2024. All rights reserved.