(Cocoa) 单窗口 Cocoa 应用程序中的 UIViewController 子类相当于什么?

2023-12-29

在尝试了 iOS 应用程序之后,我想尝试一下 Cocoa 应用程序,假设事情会非常相似。所以我有一个带有分割视图的单窗口应用程序和一些NSTableViews(想想iTunes),我正在寻找一个地方来放置我的代码,该代码将从网络获取数据来填充表格。

在 iOS 中我会把它放在viewDidLoad适当的方法UIViewController子类。这UITableViewDataSource然后将访问该数据以填充其单元格。

现在我有一个NSWindow我可以做类似的事情,但我该如何做NSWindowController为了它?这就是我想要的吗?我可以把它放在AppDelegate但似乎不对。


iOS 和 OS X 之间的区别在于,iOS 中只有一个窗口,但 OS X 中可以有多个窗口。NSViewControllers在 OS X 中的工作方式与UIViewControllers在那NSViewController旨在加载和处理单个视图,而UIViewControllers(为我相对缺乏 iOS 知识而道歉)似乎可以处理多个视图并在视图之间提供更多的粘合力。

即便是苹果文档 http://developer.apple.com/library/mac/#documentation/General/Conceptual/MOSXAppProgrammingGuide/CoreAppDesign/CoreAppDesign.html写下:

在 Mac OS X 中,AppKit 视图控制器是窗口的助手 控制器,最终负责一切发生的事情 在窗口中。

因此,对应的UIViewController在 OS X 中不是NSViewController, 反而NSWindowController,它确实为 OS X 提供了大部分内容UIViewController对于 iOS,它通过管理整个单个窗口以及其中视图的布局/内容/交互来实现。

在你的情况下,我会使用NSWindowController- 虽然如果应用程序非常简单,App Delegate也有效;如果应用程序非常复杂,那么使用NSViewController拆分代码并不是一个坏主意。

最好的方法是使用NSWindowController将以编程方式将其加载到应用程序委托中,使用[[CustomWindowController alloc] init] and

@implementation CustomWindowController
- (id)init
{
    self=[super initWithWindowNibName:@"CustomWindowNibName"];
    if(self)
    {
        //perform any initializations
    }
    return self;
}
@end

或致电

[[CustomWindowController alloc] initWithWindowNibName:@"CustomWindowNibName"];

如果您希望它可重用,请直接(并覆盖 initWithWindowNibName)。

并且您可以删除MainMenu.xib 中的默认窗口。


从根本上讲,NSWindowController 通常管理在其自己的 nib 文件中实例化的窗口。 NSWindowController 通常拥有该 nib 文件。 (虽然可以让它管理以编程方式创建的窗口,但通常不是这样做的。)

为了能够使用自定义NSWindowController,因此您需要在单独的 nib/xib 文件中创建要管理的窗口。 (使用默认的 xib 文件意味着你允许 Cocoa 自动实例化一个 NSWindowController,而没有机会进行子类化;你不能使用自定义的NSWindowController使用默认的 NSMainNibFile。对于一个简单的应用程序,只需将所有控制器代码放在 NSApplication/App Delegate 中)

至少在 Xcode 4 中,该过程涉及使用窗口模板和自定义创建 xibNSWindowController类,实例化CustomWindowController基于 -init 或任何地方的笔尖的类,然后调用[CustomWindowController showWindow:self];(或者如果这不起作用,-makeKeyAndOrderFront:)让窗口实际显示(在- (void)applicationDid/WillFinishLaunching:(NSNotification *)aNotification可能是个好地方)。

要阻止默认窗口显示,我只需将其删除。可能有更好的方法,但我不知道。

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

(Cocoa) 单窗口 Cocoa 应用程序中的 UIViewController 子类相当于什么? 的相关文章

  • 如何去除 UIImageView 遮罩后的透明区域?

    在我的一个 iOS 应用程序中 我尝试使用以下命令剪切图像的一部分CGImageMask 我已成功使用以下代码屏蔽图像 UIImage maskImage UIImage referenceImage withMask UIImage ma
  • iOS UIView子类,将透明文本绘制到背景

    我想将文本绘制到 UIView 上的子类上 以便文本从形状中切出 并且视图后面的背景显示出来 就像在 OSX Mavericks 徽标中找到的那样here http www n3rdabl3 co uk wp content uploads
  • 图像高斯模糊 - iOS 8

    我有一个移动的背景图像 我想模糊它的底部 我would只用 Photoshop 就能做到 但由于图像会移动 效果不太好 这就是我的意思 看图片底部 基本上就像底座对 iPhone 的影响一样 我使用的是 iOS 8 但不是 Swift 我根
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • UITableViewCell 的 viewDidAppear

    我通常使用viewDidAppear方法在视图完成出现后在视图上执行一些 UI 操作 我在各种情况下使用了此方法 它非常有用 但是 我需要在视图上进行一些 UI 更改UITableViewCell当它完成出现后 SDK中是否有任何可用的方法
  • iPad 2 检测

    由于我没有 iPad 2 因此我需要知道调用 UIDevice currentDevice model 时它返回什么 我以为它只返回 iPad 但看来我错了 有人可以告诉我吗 Thanks 检查是否有带摄像头的 iPad BOOL isIP
  • 方向改变时重新定位控件

    我知道自动布局可用于在方向改变时使尺寸和位置保持一致 当方向改变时 是否可以完全改变布局 例如 请查看下面的纵向模式下简单登录屏幕的线框 现在 如果我旋转设备 我想完全重新定位控件 这种事情可以用自动布局来完成吗 如果没有 我该怎么办 谢谢
  • -all_load 其他链接器标志导致第 3 方框架中的重复符号错误

    我有一个用于内部应用程序的静态库 其中包含一些常见的实用程序代码 从以前的 SO 帖子中 我发现为了在运行时加载静态库中的类别 我需要包括 all load ObjC在 构建设置 中的 其他链接器标志 字段中 但是 对于我也在使用的闭源第三
  • 在 iOS 5 中,我们可以邀请人们使用我们的应用程序或通过 Facebook 从应用程序发送好友请求吗?

    考虑X and Y是朋友Facebook他们都在各自的手机中安装了一个应用程序 但他们在这一点上并不是朋友应用程序的好友列表 那么现在 可以X 发送好友请求 Use Facebook sdk 3 1 https developers fac
  • Swift 相当于 Objective-C FourCharCode 单引号文字(例如 'TEXT')

    我正在尝试在 Swift 中复制一些 Objective C cocoa 一切都很好 直到我遇到以下情况 Set a new type and creator unsigned long type TEXT unsigned long cr
  • UILocalNotification 在后台 10 分钟后不提示

    In didFinishLaunchingWithOptions调用函数的定时器循环httpRequest每 1 分钟间隔一次 BOOL application UIApplication application didFinishLaun
  • 如何将 NSSecureCoding 与 id 对象一起使用

    我正在创建一个链接列表并使用容器对对象 下一个和上一个属性进行分组 就像基金会收藏一样 我希望它能够实现NSSecureCoding 这是声明 interface ListContainer NSObject
  • 使用远程图像创建 MSSticker

    我正在尝试找出使用网络上托管的图像创建 MSStickers 的方法 我可以使用本地图像创建 MSStickers 例如 NSString imagePath NSBundle mainBundle pathForResource imag
  • 为什么在 init 方法中使用双括号,或者是 1 == (1)?

    评估某些含义时括号有什么作用 我在代码中遇到过这个问题 当检查某些内容并且他们使用 if some condition that returns 1 code 所以我的问题是 这是否正确 我认为它总是错误的 因为 1 不返回任何东西 编辑
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • Cocoa 应用程序菜单栏不可点击

    我正在我的可可应用程序中构建一个菜单栏 其中包含以下代码 implementation我的自定义应用程序CustomApplication void setUpMenuBar CustomApplication sharedApplicat
  • watchOS 错误:控制器接口描述中的未知属性

    我将 WKInterfacePicker 添加到情节提要中 并将其连接到界面控制器中的 IBOutlet 运行应用程序时 它在控制台中显示一条错误消息 控制器的接口描述 watchPicker 中的未知属性 Code interface I
  • UITableViewCell显示多种字体

    我想在 uitableviewcell 中以类似于 iPhone 地址簿的不同字体显示两个单词 例如 约翰Buchanan 您应该使用两个 UILable 或者您可以使用OH属性标签 https github com AliSoftware
  • NSStatusItem.popUpMenu 的替代品是什么?

    NSStatusItem popUpMenu已在 macOS 10 14 中弃用 但我找不到一个不错的替代方案 let m statusItem menu statusItem popUpMenu m deprecated 我尝试使用菜单和
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即

随机推荐