Interface-Builder:将 NSView 类与 .xib“组合”

2024-04-18

我想在 Interface-Builder 中设置一个自定义 NSView,但我无法让它在 OSX 上工作。

在我的 ViewController 的 .xib 中,我添加了一个自定义视图并将类设置为 MyCustomView。我创建了 MyCustomView.h、MyCustomView.m 和 MyCustomView.xib。

在 MyCustomView.xib 中,我也将类设置为 MyCustomView。在MyCustomView.m中,- (void)awakeFromNib被称为,但是- (id)initWithCoder:(NSCoder *)aDecoder and - (id) awakeAfterUsingCoder:(NSCoder*)aDecoder aren't.

我想要实现的是,在我的 ViewController 中,我添加的视图被我在 MyCustomView.xib 中设置的视图“填充”。最好的方法是什么?

编辑:我认为我还不够清楚......

我的 ViewController 包含一个名为 MyCustomView 的自定义视图。

该视图应该是 MyCustomView 类型,其中

MyCustomView.h 我的自定义视图.m 我的自定义视图.xib

存在。我已经将 MyCustomView.xib 的文件所有者设置为 MyCustomView,并且我已经将 ViewController 中的 CustomView 设置为 MyCustomView - 但它不起作用。

如果我这样做

- (void)awakeFromNib {
    NSString* nibName = NSStringFromClass([self class]);
    NSArray* topLevelObjects;
    [[NSBundle mainBundle] loadNibNamed:nibName
                              owner:nil
                    topLevelObjects:&topLevelObjects];

    NSView* view = topLevelObjects[0];
    [view setFrame:[self bounds]];
    [self addSubview:view];
}

我只获得 NSView 类型的视图,而不是 MyCustomView...是否没有简单的方法来告诉 ViewController.xib 它是 MyCustomView?

编辑2:我上传了一个简单的项目

At https://dl.dropboxusercontent.com/u/119600/Testproject.zip https://dl.dropboxusercontent.com/u/119600/Testproject.zip您会发现一个带有 MyCustomView 的简单项目(不是在 ViewController 中,而是在 window.xib 中) - 但它没有显示 MyCustomView.xib 中的按钮。我想要实现这一目标 - 最简单、最好的方法是什么?


EDIT- 抱歉,我现有的答案未能考虑到连接插座和操作的需要。这个方法应该可以做到...

鉴于文件...

MyCustomView.h
MyCustomView.m
MyCustomView.xib

在 MyCustomView.h 中

  • 为您的界面元素声明 IBOutlet。您至少需要一个来保存指向 xib 文件中顶级视图的指针

    @property (nonatomic, strong) IBOutlet NSView *view;

在 MyCustomView.xib 中

  • 确保只有一个顶层视图
  • 在身份检查器中将文件的所有者类设置为 MyCustomView
  • 确保顶层视图设置为默认视图NSView class.
  • 现在您可以将 MyCustomView.h 中声明的 IBOutlet 连接到 xib 文件中的接口对象。至少您需要将顶层视图连接到您的view outlet.

在 MyCustomView.m 中:

- (id)initWithFrame:(NSRect)frame
{
    NSString* nibName = NSStringFromClass([self class]);
    self = [super initWithFrame:frame];
    if (self) {
        if ([[NSBundle mainBundle] loadNibNamed:nibName 
                                          owner:self 
                                topLevelObjects:nil]) {
            [self.view setFrame:[self bounds]];
            [self addSubview:self.view];
            [self.myCustomButton setTitle:@"test success"];
        }
    }
    return self;
}

在窗口的 xib 文件中,添加自定义 NSView 并将其类更改为 MyCustomView。

在 10.8 之前的 OSX 中该方法loadNibNamed是一个类方法 - 如果您需要向后兼容性,请使用它,但现在已弃用:

[NSBundle loadNibNamed:@"NibView" owner:self]

请注意,MyCustomView.xib 的视图是NOTMyCustomView 的视图,但它的视图的唯一子视图(这类似于 tableViewCell 拥有单个 contentView 的方式)。

在您发布的项目示例中,您需要进行以下更改:

  • 在 MyCustomView.h 中
    。添加 NSView 属性

  • 在 MyCustomView.xib 中:
    。更改顶级视图MyCustomView自定义类NSView(默认)
    。将文件的所有者设置为MyCustomView.
    。从文件所有者连接 IBOutletview and myCustomButton界面视图和按钮
    。为了进行测试,请将视图缩小很多,然后将按钮推到右上角(您不会在窗口中看到它,因为它在这里)

  • 在 MyCustomView.m 中:
    。将所有实现代码替换为initWithFrame方法在这里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Interface-Builder:将 NSView 类与 .xib“组合” 的相关文章

  • 在 Mac OS X 上构建 Google Breakpad

    我正在尝试建立谷歌 Breakpad http code google com p google breakpad 对于 Mac OS X 作为移植应用程序的一部分 基于主干修订版 782 Breakpad 维基 http code goo
  • 使用 anaconda 在 mac 中安装 python3 的 pygame

    我正在尝试为 python 3 安装 pygame 并收到错误 conda 安装 c cogsci pygame 解决环境 失败 UnsatisfiableError The following specifications were fo
  • Java 签名的小程序证书仅在 mac OSX10.7 (Lion) 上被吊销

    我有一个签名的小程序 可以在 Windows Mac security Loading certificates from Deployment session certificate store security Loaded certi
  • Mac 加载命令损坏

    在我们的一个应用程序上签名 代码设计 失败malformed object unknown load command 9 在网上做了一些研究后 我发现加载命令是可执行文件头中的特殊命令 内核使用它们来进行段加载 http 0xfe blog
  • 在 Mac OS X 上升级 Ruby

    我正在阅读 Programming Ruby 一书 并希望升级我计算机上的 Ruby 版本 我运行 Mac OS X Snow Leopard 并在命令行中执行 ruby v 显示我正在运行 Ruby 1 8 7 我安装了 MacPorts
  • 如何在 Mac OS X 中通过给出进程名称来获取进程的 PID?

    我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM 为此 我需要将要监视的进程的名称作为命令行参数发送 例如 monitorscript
  • 为什么 VS Code 中的 java 项目的构建路径突然不完整?

    我有一个 Java 程序 我已经使用了几个月了 它可以生成 Excel 调查 我使用 Maven 作为 VS Code 中的 Java 构建 由于某种原因 从今天开始 当我在 VS Code 中打开项目时 我收到此错误 该项目未构建 因为其
  • 以编程方式更改分辨率 OS X

    我的问题很简单 我正在开发一款游戏 正如标题所述 我希望能够以编程方式更改 OS X 上的显示分辨率 刷新率 我已经搜索了几个小时 但找不到任何东西 我已经知道如何创建全屏窗口 我还想获取支持的分辨率和刷新率的列表 来自苹果的适用于 Mac
  • 在 Mac 上使用 Homebrew 安装 PHP

    我正在尝试使用 Homebrew 在我的 Mac 计算机上安装 PHP 我正在使用以下命令 brew install php 但是 我收到以下错误 Error No available formula with the name php g
  • 如何判断输入来自哪个键盘

    设想 我有一个 USB RFID 读取器 将其连接到笔记本电脑后 它可以用作新连接的 USB 键盘 例如无需安装任何驱动程序 当接触带有 RFID 标签的阅读器时 它进入我当前的窗口 例如终端 外壳 RFID 号码 例如0009339384
  • 加载前检查 OSX 包的签名

    目标 加载已验证已签名 或针对任意算法进行验证 的 so bundle 我希望能够使用 OSX 的内置二进制签名工具或某些自定义算法来验证 so bundle 然后使用 dlopen 加载该 so bundle 问题在于似乎没有编程方式来检
  • OS X 和 iOS Safari 历史记录。replaceState 限制抛出 SecurityError:DOM 异常 18

    在 Safari 中时replaceState 它会抛出 SecurityError DOM异常18 尝试突破 用户代理的安全策略 更多信息 https forums developer apple com thread 36650 htt
  • RVM 安装问题 - 无法执行端口 (autoconf)

    我正在尝试在 OSX mountain lion 上安装 Jekyll 首先我想安装RVM 然后安装最新的ruby 但是 RVM 安装失败 我无法解决问题 任何帮助表示赞赏 这是我所做的 安装的 OSX 命令行工具 尝试安装 RVM cur
  • MonoGame Mac 模板安装

    我在 Mac 上的 MonoDevelop 中安装 MonoGame 模板时遇到问题 我已按照自述文件的指示将 MonoDevelop MonoGame 2 5 文件夹放置在 MonoDevelop app Contents MacOS l
  • openmpi 忽略错误:无法识别 mca 接口

    今天早上 我升级了 gfortran 从 4 7 到 6 1 0 和 OpenMPI 从 1 10 到 2 0 1 编译器 我写了这个简单的程序 program main use mpi f08 implicit none
  • 尝试在 Xcode 中为 OS X 应用程序设置 Tab 键顺序

    我正在使用 Xcode 7 3 构建 OS X 桌面应用程序 并尝试为其中一个表单设置 Tab 键顺序 我发现有几篇文章解释了 Xcode 4 的类似问题 但没有任何进展 https www youtube com watch v SRrE
  • 由于无法确认开发者身份而无法打开

    我在 Mac OSX 中开发了一个应用程序和守护进程 并且我已经在 xcode 中与开发者 ID 签署了应用程序和守护进程源代码 在守护进程中 我已经对每个框架进行了签名并打包 并且我使用软件包安装程序对所有框架进行了 pkg 现在我的应用
  • 在 MACOSX 上找不到“Python.h”文件,如何解决这个问题?

    pip3 安装 PyAudio 0 2 12默认为用户安装 因为普通站点包不可写 收集PyAudio 0 2 12 使用缓存的 PyAudio 0 2 12 tar gz 42 kB 安装构建依赖项 完成 获取建造轮子的要求 完成 准备元数
  • 如何在 mac yosemite 上撤消“brew link --force openssl”

    我在尝试使用 php54 升级酿造公式时遇到了一些问题 我在github上找到了一些解决这个问题的建议openssl php 酿造错误 https github com Homebrew homebrew php issues 1181 其
  • Mac 操作系统屏幕上的 Git 自动补全

    我在 mac 上使用 git 并配置了自动完成功能 如下所示http www codethatmatters com 2010 01 git autocomplete in mac os x http www codethatmatters

随机推荐

  • 计算字符串列表中子字符串的出现次数

    我知道计算列表项的简单出现次数很简单 gt gt gt 1 2 3 4 1 4 1 count 1 3 但我想知道如何做是每次列表条目的子字符串中出现字符串时进行计数 例如 我想看看有多少次foo出现在列表中data data the fo
  • Xcode 4 Interface Builder:如何设置文件所有者

    我定义了 myController h 和 myController m 并继续使用向导创建 myController xib 但是 我无法将 xib 文件中的控件连接到类接口 通常 当我将连接十字线放在文件所有者图标上时 它会显示已声明为
  • 为什么我的 MySQL 数据列中只保存了 64kB 数据?

    我试图将一个很长的文本字符串插入到 MySQL Blob 列中 但 MySQL 只保存了 64kB 的数据 该字符串的长度为 75360 个字符 我正在使用 PHP 连接mysql connect 有任何想法吗 它是 Blob 还是 Tex
  • 在 iOS 中使用触摸绘制水平或垂直线

    我正在开发一个项目 我希望如果用户触摸在水平方向移动 则应绘制水平线 如果用户触摸在垂直方向移动 则应绘制垂直线 请建议一些使用 Swift 的解决方案 我在下面尝试过 但这是自由的 override func touchesBegan t
  • PHP call_user_func 与仅调用函数

    我确信对此有一个非常简单的解释 这有什么区别 function barber type echo You wanted a type haircut no problem n call user func barber mushroom c
  • MVC ASP.NET 地图路由不适用于表单 GET 请求

    In View using Html BeginForm PageName ControllerName FormMethod Get
  • 如何在 C++ 中创建内存泄漏?

    我只是想知道如何使用 C 创建系统内存泄漏 我对此进行了一些谷歌搜索 但没有得到太多结果 我知道在 C 中执行此操作实际上不太可行 因为它是托管代码 但想知道是否有一种简单的方法可以用 C 执行此操作 我只是觉得看看系统因代码编写不正确而受
  • Netbeans - 类没有 main 方法

    我的程序只是一个简单的 System out println 但是netbeans找不到main方法 netbeans 6 7 1和WIN7有冲突吗 有什么可能的错误吗 当您手动移动主类位置时会发生这种情况 因为 Netbeans 不会刷新
  • 如何有条件地跳过 Cucumber 中的场景?

    如何有条件地跳过场景 例如 我希望仅在满足某些条件时才继续某个场景 但如果不存在 我不希望将其注册为失败 这是我遇到的一个问题 我编写的测试是针对一个 UI 该 UI 具有不断变化的 BE 数据库 我目前无法在其中包含静态数据 这意味着有时
  • 在 javascript 中查找经过的时间

    我是 JavaScript 新手 我正在尝试编写一段代码来计算从用户登录到当前时间所经过的时间 这是我的代码 function markPresent window markDate new Date document ready func
  • /admin 处导入错误:没有名为 defaults 的模块

    我正在将我的网站从 django 1 4 升级到 django 1 6 但它一直出现以下错误 admin 处的 ImportError 没有名为 defaults 的模块 其他地方都说你应该这样做 from django conf urls
  • 如何在IIS7.5上Response.Write?

    我正在尝试写一个给客户的回复 response StatusCode int HttpStatusCode BadRequest response ClearContent response Write String Format CRLF
  • 在delphi中的“自定义”浏览器中修改requestHeaders

    我的 deplhi 应用程序 IE 中集成了一个浏览器 我需要调用某个 Web 应用程序 并且需要在标头中为来自应用程序浏览器的所有请求附加一个新变量 例如 jquery 添加到 xhrobjHTTP X REQUESTED WITH范围
  • 使用 jQuery 进行渐变填充?

    我有一个 div 需要渐变背景 然而 div 的大小是可变的 这让我又回到了 不能在 CSS 中做渐变 的境地 然而 我很确定这在 jQuery 中是可能的 我只是似乎找不到一个合适的例子 有人可以指点我的方向吗 Thanks 如果有人需要
  • 如何更新猫鼬嵌套数组文档[重复]

    这个问题在这里已经有答案了 我知道这个问题是重复的 但我不知道为什么我被困住了 Question 我怎样才能编辑 requirement update 数组文档 使用 find by id and requirement update id
  • 带有条件 isset 的 If 语句和比较不能一起工作

    我在制作时遇到问题if声明 code if detail variable exists and is equal to 1 code if detail variable doesn t exist or is not equal 1 由
  • 如何向 dateadd sql 添加小时、分钟、秒?

    我想要一个完整的约会 所以今天是 7 7 2010 12 00 00 am 到 7 7 2010 11 59 59 pm 所以这应该是完整的 24 小时 因为上午 12 00 00 就是 8 号 所以我有这个 select DATEADD
  • Python Pandas - 根据组中值的存在来过滤组

    我需要按一列对数据框进行分组 然后过滤掉另一列中不包含特定值的所有组 例如 这是我的数据框 A B 1 False 1 True 2 False 2 False 3 True 3 False 4 False 我想按 A 列进行分组 然后删除
  • 当我使用 asp.net 从 xml 文件写入/读取时保留回车符

    我有 TextBox 来获取用户的评论 评论将保存到 XML 文件中 问题是当我写一个文本有回车键 新行 时 它会以正确的方式保存到xml中 像这样
  • Interface-Builder:将 NSView 类与 .xib“组合”

    我想在 Interface Builder 中设置一个自定义 NSView 但我无法让它在 OSX 上工作 在我的 ViewController 的 xib 中 我添加了一个自定义视图并将类设置为 MyCustomView 我创建了 MyC