【问题标题】:How to instantiate an NSObject in the Interface builder .xib file如何在 Interface builder .xib 文件中实例化 NSObject
【发布时间】:2010-10-31 08:06:42
【问题描述】:

您好,

我有一个基于视图的应用程序项目,我在其中创建了一个名为“SquareClass”的 NSObject 类。 现在,从 Xcode 的界面构建器中,我希望能够将“SquareClass”实例化为具有全局范围的方形对象,这样,当我从任何 UI 控件(即文本框、按钮等)创建操作时... ),我希望能够在这些操作中调用该对象的方法。

示例:

(void)MyAction1:(id)color
{
   [square setColor:color];
}

(void)MyAction2:(id)width
{
   [square setWidth:width];
}

如您所见,方形对象需要具有全局范围。 对于我们中的一些人来说,这可能看起来很容易,或者可能是错误的做法。 我浏览了网络,找到了一种 .nib 文件的方法,而不是 .xib 文件。

任何建议将不胜感激。 非常感谢。

约翰。

ps:这是我的第一篇文章,请放纵一下。

【问题讨论】:

    标签: iphone cocoa-touch xcode interface-builder nsobject


    【解决方案1】:

    首先,NIB 文件在所有意图和目的上都与 XIB 文件相同;它只是一个 XIB 文件的编译版本。

    现在,要在 NIB/XIB 中创建从 NSObject 派生的对象,只需将 NSObject 从库窗口拖到文件中即可。然后在 Identity Inspector 上将类更改为您的自定义类。

    如果你定义这样的方法:

    - (IBAction)myAction:(id)sender
    

    您将能够在 Interface Builder 中连接它们。

    说了这么多,很难说你正在做的事情是否是正确的。在我看来,您应该使用 NSViewController 子类,因此请查看相关文档。

    您还应该确保您了解什么是视图、控制器和模型对象。这方面的文献很多。

    【讨论】:

      【解决方案2】:

      如果你创建一个扩展 UIView 的类,那么你可以让你的 xib 的 File's Owner 实现扩展类。从那时起,只需将一个实例变量添加到正方形的扩展类中。该过程的最后一步是向您的类添加方法以将每个控件绑定到操作。

      - (IBAction) pinSelected: (id)sender;
      

      一旦你创建了这些方法(确保让它们返回 IBAction,它实际上是 void 的别名,但作为对接口生成器的提示)然后你可以通过文件的所有者将你的控件绑定到方法(使用控制 + 拖动建立链接)。

      祝你好运!

      【讨论】:

      • 默认情况下,项目获取一个 SquareController 和 SquareDelegate 类。我相信其中之一可以扩展 UIView,对吧?该类应该实例化正方形吗?如果是这样,实例化代码是否应该在 @implementation 声明之后?
      • 我会为您的自定义视图添加一个单独的类。他的 App Delegate 应该只在应用程序构建和拆除时处理应用程序范围的事情。控制器很可能是一个 UIViewController,其主要目的是管理 UIViews 的实例。
      • 我无法按照您的建议进行操作。你介意使用婴儿步吗?当你说:“如果你创建一个扩展 UIView 的类,那么你可以让你的 xib 的文件所有者实现扩展类。”我现在有一个扩展 UIView 的类,如何扩展文件的所有者?我似乎无法编辑它。我能做的是将文件所有者的类标识更改为“SquareClass”。这是你的意思吗?那么一旦我添加了动作,我该如何实现它们呢?
      • 当然。我会做这样的事情: 1)创建基于 NSObject 的“方形”类。 (完成) 2) 创建一个扩展 UIView 的“squareView”类。 3)为您想要做的每件事添加操作方法到您的 squareView 类(例如 changeWidth:) 4)在 Interface Builder 中打开您的 xib。单击文件的所有者并将类标识设置为“squareView”。 5)现在添加您可能需要查看的不同控件(如按钮等) 6)按住控件并从控件单击/拖动到文件所有者。它将拖动一个蓝色箭头,直到您释放鼠标按钮。选择要将控件绑定到的事件。
      • 非常感谢 MystikSpiral,我一下班就试试这个,然后告诉你。
      【解决方案3】:

      我找到了我需要的方法,而 XIB 文件中没有。尽管上述建议是有效的,但它比我想象的要简单。

      为了使用方形对象,我只需要引用头文件:

       #import "square.h"
      

      在 SquareUIViewController.h 中添加对方形对象的引用:

      Square *square;
      

      然后在 SquareUIController.m 中,我只需要在执行其他任何操作之前分配/初始化正方形对象:

      (IBAction)myInit
      {
      square = [[Square alloc] init];
      }
      

      现在我可以使用第一篇文章的方法了 瞧!

      ps:批评者,开火!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-10
        • 2011-08-11
        • 2012-08-04
        • 2023-03-08
        • 2014-11-12
        • 1970-01-01
        • 2013-08-25
        • 1970-01-01
        相关资源
        最近更新 更多