将视图或窗口添加到 MainWindow

2023-12-27

我在一些我无法理解的基本概念上遇到了困难。我希望有人能为我解决一些问题,因为我没有找到可以解释这一点的资源。或者也许,它在明亮的地方,但我只是看不到它。

到目前为止的理解:主窗口包含菜单,因此或多或少是必要的。这info.plist持有笔尖,它是在 appstart 上加载的。

到目前为止还不明白:我正在尝试一个单一窗口应用程序。我可以在 appDelegate 中执行所有操作(到目前为止工作正常),并且我可以有一个额外的控制器,我可以连接到该控制器UIElements从主窗口到(虽然到目前为止还可以)。但是:我真正想做的是有一个 MainWIndow,它只有菜单,以及一个单独的控制器和笔尖(以后可能甚至不止一个),随后加载和添加。

我的问题:

  • Use NSWindowController or NSViewController?为什么? (我会用NSViewController)

  • 实例化什么、在哪里以及如何实例化(大概在didFinishLaunchingappDelegate 的?)

  • 如何将窗口或视图添加到唯一的主窗口,而不是拥有第二个独立窗口(我还没有准备好使用 multiDocumentApps)

非常感谢,任何想法表示赞赏!


到目前为止还不明白:我正在尝试一个单一窗口应用程序。我可以在 appDelegate 中做所有事情(到目前为止工作正常),并且我可以有一个额外的控制器,我可以将 UIElements 从 MainWindow 连接到(虽然到目前为止工作正常)。但是:我真正想做的是有一个 MainWIndow,它只有菜单,以及一个单独的控制器和笔尖(以后可能甚至不止一个),随后加载和添加。

为了清楚起见,MainWindow 是一个 nib 文件,因此我将其称为 MainWindow.nib。它是应用程序的 Info.plist 文件中指定的标准 nib 文件名,作为应用程序启动时要加载的 nib 文件。

默认情况下,Xcode 创建一个 MainWindow.nib 文件,其中包含主菜单和主窗口。您可以从 MainWindow.nib 文件中删除该窗口,并使用另一个 nib 文件来保存该窗口。我们将这个另一个 nib 文件称为 MyWindow.nib。

使用 NSWindowController 还是 NSViewController?为什么? (我倾向于查看控制器)

因为你将有一个单独的 nib 文件来保存window,你将使用NSWindowController。创建一个子类NSWindowController, e.g. MyWindowController,它将负责控制存储在 MyWindow.nib 中的窗口。该子类将具有指向该窗口中的用户界面元素的出口,以及您在 MyWindow.nib 中定义的潜在其他对象。

执行此操作时,请务必在 MyWindow.nib 中执行以下操作:

  • 将文件的所有者设置为 typeMyWindowController;

  • 连接window文件所有者中的出口到窗口对象。

NSViewController用于管理视图,通常从 nib 文件加载,不适用于 Windows。

您可以在 .nib 文件中重复此操作,窗口是NSWindowController管理该窗口 - 根据需要管理多个窗口。

实例化什么、在哪里以及如何实例化(大概是在 appDelegate 的 didFinishLaunching 中?)

由于您希望应用程序中有一个窗口,因此一种选择是让应用程序委托保存对管理该窗口的单个窗口控制器的引用(实例变量、声明的属性)。然后,在-applicationDidFinishLaunching:,实例化所述控制器。

例如:

// MyAppDelegate.h

@class MyWindowController;

@interface MyAppDelegate : NSObject <NSApplicationDelegate>
@property (retain) MyWindowController *myWindowController;
@end

and:

// MyAppDelegate.m

#import "MyAppDelegate.h"
#import "MyWindowController.h"

@implementation MyAppDelegate

@synthesize myWindowController;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.myWindowController = [[[MyWindowController alloc]
        initWithWindowNibName:@"MyWindow"] autorelease];
    [self.myWindowController showWindow:self];
}

…
@end

如果您想要更多窗口,只需声明实例变量/属性来保存相应的控制器并像上面那样实例化控制器即可。

如何将窗口或视图添加到唯一的主窗口,而不是拥有第二个独立窗口(我还没有准备好使用 multiDocumentApps)

您确定要添加window到主窗口?如果是这样,那就被称为附加窗口。您可以使用上面的机制(将窗口放在自己的 nib 文件中,有一个子类NSWindowController要管理它,请拥有您的原始版本MyWindowController保留对附加窗口控制器的引用(实例变量、声明的属性),并在适当时实例化它/加载附加窗口 nib 文件),然后使用-[NSWindow - addChildWindow:ordered:]将辅助窗口附加到主窗口。

例如,考虑到MyWindowController有申报财产secondaryWindowController,在 MyWindowController.m 中:

- (void)someAction:(id)sender {
    // If the secondary window hasn't been loaded yet, load it and add its
    // window as a window attached to the main window
    if (self.secondaryWindowController == nil) {
        self.secondaryWindowController = [[[MySecondaryWindowController alloc]
            initWithWindowNibName:@"MySecondaryWindow"] autorelease];
        [[self window] addChildWindow:self.secondaryWindowController.window
                              ordered:NSWindowAbove];
    }
}

如果您想向主窗口添加视图,最简单的方法是直接在 nib 文件中执行此操作。

如果您需要/想要以编程方式执行此操作,则需要引用视图,然后将其添加到主窗口的内容视图,例如:

[self.window.contentView addSubView:someView];

您可以创建someView以编程方式或从单独的 nib 文件加载它。在后一种情况下,该过程与上面描述的非常相似,但不是使用NSWindowController你会使用一个子类NSViewController.

例如,在 MyWindowController.m 中:

- (void)anotherAction:(id)sender {
    // If the view hasn't been loaded yet, load it and add it
    // as a subview of the main window's content view
    if (self.someViewController == nil) {
        self.someViewController = [[[MyViewController alloc]
            initWithNibName:@"MyView" bundle:nil] autorelease];
        // You'll probably want to set the view's frame, e.g.
        // [self.someViewController.view setFrame:...];
        [self.window.contentView addSubview:self.someViewController.view];
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将视图或窗口添加到 MainWindow 的相关文章

  • 如何在我的应用程序中添加应用内购买

    我想在我的应用程序中使用应用程序购买应用程序 但我不知道如何执行此操作 任何人都可以帮助我如何做以及源代码在哪里 给我链接或代码 这里有一堆链接 应用内购买编程指南 http developer apple com iphone libra
  • -all_load 其他链接器标志导致第 3 方框架中的重复符号错误

    我有一个用于内部应用程序的静态库 其中包含一些常见的实用程序代码 从以前的 SO 帖子中 我发现为了在运行时加载静态库中的类别 我需要包括 all load ObjC在 构建设置 中的 其他链接器标志 字段中 但是 对于我也在使用的闭源第三
  • 在完成块中保留循环

    在我的课堂上 我创建了这个方法 void refreshDatasourceWithSuccess CreateDataSourceSuccessBlock successBlock failure CreateDataSourceFail
  • Docker 容器与主机网络的网络性能非常慢

    我遇到了 Docker 容器和主机网络之间网络性能缓慢的问题 我在 Docker 论坛上提出了这个问题 但到目前为止还没有收到答案 Problem 设置 同一本地网络上的两台 Mac 第一个运行 MQTT 代理 mosquitto 第二个运
  • 处理过时的 NSURL 书签的正确方法是什么?

    从安全范围的书签解析 NSURL 时 如果用户已重命名或移动该文件或文件夹 则该书签将过时 苹果的文档对于陈旧性有这样的描述 isStale 返回时 如果是 则书签数据已过时 你的应用程序应该 使用返回的 URL 创建一个新书签并用它代替
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • NSCFData isRessized 崩溃?

    我目前在控制台中收到此崩溃日志 2011 08 23 19 18 40 064 App 1697 707 NSCFData isResizable unrecognized selector sent to instance 0x11f1c
  • NSString stringWithContentsOfFile 失败,错误代码似乎错误

    我正在尝试将文件加载到字符串中 这是我正在使用的代码 NSError error nil NSString fullPath NSBundle mainBundle pathForResource filename ofType html
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 生成具有固定数字长度的随机数?

    我正在生成随机数 int randomID arc4random 3000 但我想生成至少 4 位数字的随机数 如 1000 2400 1122 我想知道 Objective C 的代码 请尝试 生成数字 1000 9999 int ran
  • npm 命令 create-react-app 失败

    我正在尝试在运行 Os X sierra 10 12 6 的计算机 mac pro 2017 上测试reactjs 我已经遵循了 Facebook 教程 确保您安装了最新版本的 Node js done 按照安装说明进行操作创建一个新项目
  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • “预期的 ';'在 Swift 下的顶级声明符之后”

    我正在尝试将所有颜色设置在一个 Swift 文件中 该文件可以在我的整个应用程序中使用 下面的代码会导致 import Foundation import UIKit class DotColors let tsblueColor UICo
  • UIPickerView selectRow 未按预期工作

    我创建了一个UIPickerView它有两个组件 第一个组件 A 的行数固定为 13 另一个组件 B 的行数可变 具体取决于 A 中选择的行 加载时UIPickerView我调用以下命令 以便我可以在两个组件中默认选择 但是我遇到的问题是只
  • 访问目标 c 中的类方法。使用 self 还是类名?

    我正在学习 iOS 编程 并且对以下有关关键字 self 的使用的代码感到困惑 据我了解 self就像Java的this 它指的是当前实例 当我想调用类方法时 通常的方式应该是这样 PlayingCard validSuits 但是侵入实例
  • iPhone:UIApplication WillResignActiveNotification 从未被调用

    我正在视图控制器中播放视频 当用户按下硬件主页按钮并且当前正在播放视频时 应用程序崩溃并显示EXC BAD ACCESS在模拟器中 我读到我应该使用applicationWillResignActive停止视频播放的消息应该可以解决崩溃问题
  • 如何表示Apple 发布的Mac OSX 崩溃报告?

    对于 iOS 崩溃报告 将崩溃报告拖放到管理器中就足够了 符号化 iPhone 应用程序崩溃报告 https stackoverflow com questions 1460892 symbolicating iphone app cras
  • 像 TraceGL 一样分析 Objective C 中的代码路径?

    TraceGL 是一个非常简洁的项目 它允许 JS 程序员跟踪 Javascript 中的代码路径 它看起来像这样 我想为 Objective C 构建类似的东西 我知道运行时使跟踪方法调用变得相当容易 但是我如何跟踪控制流 例如 在上面的

随机推荐

  • Android源代码不工作,通过glReadPixels读取帧缓冲区

    我是 Android 开发新手 有一项任务是在指定的时间间隔后读取帧缓冲区数据 我想出了以下代码 public class mainActivity extends Activity Bitmap mSavedBM private EGL1
  • 我应该使用哪种依赖注入工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 Spring 按需创建 Bean

    我想在启动后以工厂模式创建一些 spring beans 例如 我经常有一些工作要做 并且需要创建一个任务 bean 它可能依赖于其他单例 spring bean 并执行它 可能有多个工作要同时执行 因此每个任务 bean 都需要是独立的
  • 第一个 DropDownList 更改后如何从数据库加载第二个 DropDown 列表

    我正在构建一个网络应用程序 在某些时候 用户需要将数据输入到表单中 该表单有几个文本字段和DropDownLists 其中一个 DDL 依赖于其先前的 DDL 发生的情况是 当用户从第一个 DDL 中选择一个值时 第二个 DDL 应该从数据
  • 预约调度算法(N个人,N个忙闲时段,约束-满足)

    问题陈述 我们有一位雇主想要面试 N 个人 因此安排了 N 个面试时段 每个人都有一个空闲 忙碌的时间表 给出一个算法 如果可能的话 将 N 个人安排到 N 个位置 如果不可能 则返回一个标志 错误 等 最快的运行时复杂度是多少 到目前为止
  • 玩!框架 - 处理 POST 请求

    这是处理登录 POST 请求的路由 POST login submit controllers Users loginSubmit user String password String 这是login scala html
  • 比较 2 个不同行和列之间的日期

    我在弄清楚这一点时遇到问题 这是一个示例表 我需要能够找到的是对于给定的客户 ID 和 Part ID Discontinue Date 大于下一行的 effective Date 的任何记录 这是一个客户定价表 因此第 53 行的 Dis
  • 有没有办法在 Spring XML 中指定默认属性值?

    我们正在使用一个属性占位符配置器在 Spring 配置中使用 java 属性 详细信息在这里 http static springsource org spring docs 2 5 x reference beans html beans
  • 使用 WinHTTP 和 Excel 配置代理

    我正在使用 WinHTTP 在 Excel VBA 宏中执行 GET 请求 但是 如果我尝试从具有代理的网络中的计算机发出请求 则它不起作用 如果我手动配置它 它可以工作 但我认为使用我正在开发的工具的人不会知道他们的代理服务器 有没有办法
  • 为什么 _.escape 会修改 Underscore.js 中的 / 字符?

    我正在浏览下划线 js api http underscorejs org escape我注意到 escape逃脱 lt gt and 人物 让我惊讶的是逃跑 有没有理由逃避 我不知道的角色 EDIT 好吧 看来是推荐的OWASP http
  • MVC 3 实体框架中从多对多链接表添加关系时发生主键冲突

    我已经阅读了这里的许多问题 这些问题乍一看似乎有类似的问题 但看起来并不完全相同 如果这个问题在某个地方得到了回答 我深表歉意 但就像我说的 我已经阅读了很多内容 但找不到答案 我正在使用实体框架和 MVC 3 我正在尝试向实体框架中的产品
  • JavaScript:V8 问题:小整数是否被合并?

    正在看这个V8设计文档 https docs google com document d 11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44 edit 其中有一个部分用于Constant Pool En
  • CoreBluetooth配对反馈/回调

    感觉好像我在这里遗漏了一些东西 但是我如何获得有关密码保护的外围设备配对失败还是成功的反馈 当我连接受密码保护的外围设备时 会弹出密码 UIAlertView 并且外围设备会立即连接 调用 didConnectPeripheral 并断开连
  • MS Sql:条件 ORDER BY ASC/DESC 问题

    我想使查询中的排序成为有条件的 因此如果它满足条件 则应按降序排序 例如 SELECT FROM Data ORDER BY SortOrder CASE WHEN Direction 1 THEN DESC END 不要改变ASC or
  • 使用 NLTK 和 WordNet;如何将动词简单时态转换为现在时、过去时或过去分词形式?

    使用 NLTK 和WordNet https en wikipedia org wiki WordNet 如何将动词简单时态转换为现在时 过去时或过去分词形式 例如 我想编写一个函数 它会给我预期形式的动词 如下所示 v go presen
  • Docker:使用 dockerfile 在 Windows 容器上安装 chrome

    我正在尝试在我的 Windows 容器上安装 Chrome 我已经使用 dockerfile 创建了我的 docker 映像 并且我想使用此 dockerfile 安装 chrome 我尝试过使用以下命令 RUN apt get updat
  • 我可以在运行 VS 单元测试时进行调试吗?

    我想对使用自定义事件的用户组件进行单元测试 当不使用 VS 单元测试框架 debug assert 执行此操作时成功 当使用 VS 单元测试框架执行相同的操作时 断言失败 这是不合逻辑的 所以我想在使用 VS 框架进行单元测试时进行调试 但
  • C++ 后端和 C# 前端?

    我有一个项目 在该项目中 我必须每秒处理 100 条 如果不是 1000 条 消息 并相应地在图表上处理 绘制这些数据 用户将搜索一组数据 其中将实时绘制图表 而不必在图表上绘制数千个值 我无法理解使用 DLL 在 C 中进行大量消息处理
  • Android Studio 无法识别我的设备

    问题就在这里 我想在我的设备 Samsung Galaxy Ace 2 上运行 Android Studio 应用程序 但对我来说没有任何作用 告诉我我错过了什么 1 USB调试打开 2 ADB驱动程序已安装 在设备管理器中我可以看到And
  • 将视图或窗口添加到 MainWindow

    我在一些我无法理解的基本概念上遇到了困难 我希望有人能为我解决一些问题 因为我没有找到可以解释这一点的资源 或者也许 它在明亮的地方 但我只是看不到它 到目前为止的理解 主窗口包含菜单 因此或多或少是必要的 这info plist持有笔尖