问题标签 [nsviewcontroller]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib
我在 Interface Builder 中有一个视图设置,其中包含一个加载另一个 Nib 文件的 viewController。但是,由于某种原因,正在加载的 nib 文件中包含的对象永远不会被调用awakeFromNib
。我在这里想念什么?无论如何在界面构建器中从 Nib 加载视图并在界面构建器中管理它们的属性和大小?
一般来说,管理多个 nib 并将它们组合成复杂视图的最佳实践是什么?
最终解决方案:
我像这样创建了一个 NSViewController 子类。
这样,您只需要在包含视图控制器的 nib 中挂钩占位符插座,它会自动为您加载其他 nib 并从占位符复制所有属性并将其替换到主 nib 中。
cocoa - NSToolbar 和视图控制器层次结构
我有以下类层次结构:
MyGeneralViewController
包含一些ViewControllerA
和使用的通用代码ViewControllerB
。一段通用代码是NSToolbar
为NSToolbarDelegate
.
工具栏中的一个按钮是一个按钮,它允许用户打开NSTextView
一个单独的窗口(更多空间、使用关键字的附加功能等)。
方法是:
此工具栏按钮应仅可用于由 控制的视图ViewControllerA
。我的理由是,如果我openTextWindow
只为 实现该方法ViewControllerA
,则工具栏按钮对于由 控制的视图将变为灰色(不可用)ViewControllerB
,因为运行时系统将向上类层次结构查找为工具栏按钮定义的方法和没找到。
情况似乎并非如此。当我使用 实现该方法时MyGeneralViewController
,该按钮始终可用(如预期的那样,但不是我想要的)。但是当我实现它只是因为ViewControllerA
它永远不可用。
我是否遗漏了什么或者这是它应该工作的方式?
cocoa - NSMutableArray 在需要加载之前没有被填充
我正在尝试设置一个简单的基于 Mac 的 2D 平铺引擎,使用 2D NSMutableArray 进行映射。我正在使用 NSViewController 的子类,并引用地图对象(其中包含所述数组),并通过它将平铺数据的绘图请求传递给地图,以维护 MVC 完整性。但是,在我的 drawRect 代码开始触发之前,我的应用程序似乎没有用对象填充数组。
每次我按书面方式运行此应用程序时,我的窗口都无法加载,并且我在调试器中收到错误消息“-[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array”。据我所知,在实际显示或需要绘制视图之前,我的数组应该用零完全初始化。
这是我的 NSViewController 子类中的 -loadView 方法:
这是我的地图对象的 init 方法:
明智地使用断点表明
在 init 开始它的 for 循环之前以某种方式被调用 - 显然,我的 drawRect 代码必须引用数组从那里开始并很快失败。我一定是做错了什么或不正常,但我无法弄清楚它可能是什么。
objective-c - NSViewController 没有被创建
我正在构建一个带有一个带有 xib 的主窗口控制器的可可应用程序。该 xib 包含许多自定义视图类。我想在 xib 中添加一个 NSViewController,但我遇到了一些麻烦。
在界面生成器中,我可以将 NSViewController 拖到 xib 中,为其分配自定义控制器类,并将其视图分配给 xib 中的适当视图。问题出在: the initWithNibName:Bundle:
or都没有loadView
被调用。
我错过了什么?
编辑: 人们似乎误解了这个问题,所以我会澄清一下。
该窗口已经有一个视图控制器。我想要做的是将单独的视图控制器分配给几个子视图。我需要知道如何将我NSViewController
的子类与适当的NSView
子类(主窗口的子类)相关联。
或者换句话说,我正在尝试使用多个NSViewController
子类来控制单个 .xib 文件中的许多不同的自定义视图(每个视图)。这些控制器和子视图有自己的 .xibs,它们最终应该在同一个窗口中可见。
objective-c - 具有自定义视图的 NSMenuItem 不会更新
我有一个带有自定义视图的 NSMenuItem。但是,当我想更新菜单中的第一行时,它会添加 xib 文件中的内容,而不是我设置的内容。
我的代码:AppDelegate.m:
GravatarMenuItem.h:
出口链接在文件所有者的 XIB 文件中。
结果如下: 日志:
结果:
iphone - 如何在视图控制器之间传递数据
在这一点上,我有一个相当复杂的应用程序,并且感觉好像我处理数据的方式不符合标准。
所以我已经开始采取一些措施来使我的应用程序对 MVC 更友好。首先,我已经从在我的所有 ViewController 中使用内联解析器方法转变为创建一个专用的解析器类。
不难调用我只是设置了类然后调用了我为我的请求将数据传递给我的初始化方法..我的对象类中的所有内容都很好我从服务器获得了一大堆返回数据正在解析..但这就是我迷路的地方。
如何将该数据返回给调用它的 ViewController?我在协议和代表方面做了一些工作。但我不知道这将如何适应这一点。
这是我想要实现的图形示例。
因此,如上视图控制器调用连接到数据库的对象类的初始化方法下载数据,然后解析该数据。我遇到的问题是我如何将该数据获取到 ViewController2..
这样做的最合适和面向未来的方法是什么?
cocoa - NSTextField 显示一次后不接受输入
我正在开发一个基于文档的可可应用程序。启动界面仿照 GarageBand:显示欢迎屏幕,显示两个交替视图之一(通过分段控件切换):“创建新项目”和“浏览最近的项目”。每个视图都由专用的 NSViewController 控制(在本例中 为 NewProjectViewController和RecentProjectsViewController)。
为了实现这一点,我将 NSDocumentController 子类化,以便在启动时显示这个“欢迎屏幕”,而不是创建一个空文档(在用户指定某些最低设置之前,空文档在我的应用程序中没有意义)。
启动/初始文档创建后,如果用户选择“创建新项目...”(即新文档),我会显示一个窗口,该窗口重用与欢迎屏幕中的“新项目”选项卡相同的界面,通过实例化相同的 NewProjectViewController并将其视图添加到窗口。
在这两种情况下,视图控制器的视图都是从 .xib 创建的。视图控制器本身以编程方式实例化,并且使用 -addSubview: 将其视图添加到窗口的预先存在的子视图中。
NewProjectViewController 的视图包含几个可编辑的 NSTextField 实例和其他控件。
问题:视图控制器视图中的所有 NSTextField 实例只会在第一次接受文本输入;从第二次显示视图开始,尝试编辑文本将产生系统警报声。可以选择(突出显示)文本,但不能更改。此外,可以以编程方式更改文本。
可以毫无问题地更改其他控件(弹出按钮)。
我尝试从一开始就显示“新建文档”窗口(而不是欢迎屏幕),但结果是一样的:第一次有效,第二次无效。
这是第一响应者的问题吗?
objective-c - 如何从 NSViewController 显示视图?
我是objective-c的新手,所以请多多包涵。我有一个从网络摄像头返回图片的类,我正在尝试将其显示到屏幕上。我进行了子类NSViewController
化以从相机类中获取图像并将其设置为实例NSImageView
并将NSViewController
的视图设置为NSImageView
. 我在 Interface Builder 中创建了一个自定义视图,将一个 NSViewController 对象拖到 MainMenu.xib 中,将它的类设置为 PhotoGrabberController,并控制从自定义视图中单击拖动到 PhotoGrabberController 以将其出口绑定设置为视图。(我真的不知道这在幕后是如何运作的,对我来说这似乎很神奇)。屏幕上什么都没有显示,我一直在玩这个。
在 PhotoGrabberController.h
在 PhotoGrabberController.m 中
我玩弄了在 AppDelegate 中放置一堆不同的东西,applicationDidFinishLaunching
但现在它的设置方式我认为我不需要在其中放置任何东西。
问题
- 如何让主窗口显示图像?
- 可以使用 PhotoGrabberController.view 而不是创建视图子类吗?
- 我对这里的工作方式的理解有什么问题?我花了很多时间试图弄清楚这一点,但一无所获。
- 你能指导我找到一个我可以完全理解它是如何工作的资源吗?我发现 Apple 文档太详细太厚了。我只想了解窗口、视图和视图控制器是如何加载和交互的。
ios - 设置使用 initWithNibName:bundle:? 初始化的 NSViewController 的最佳方法
我有一个 NSViewController 的子类,它从 nib 加载其视图(使用 initWithNibName:bundle: 并且它是该 nib 的文件所有者)。
加载笔尖后我需要进行一些初始化,并且我希望我的代码是最兼容的:
- 在 ios 中:有 viewDidLoad 方法可以做到这一点
- 在 osx 中:在雪豹中,没有像 viewDidLoad 这样的方法,但是 awakeFromNib 也会在文件的 nib 所有者上调用
所以我的问题是:
- awakeFromNib 是否也在 Lion 中的 nib 文件的所有者上调用?
- 如果我使用 awakeFromNib,我需要调用 [super awakeFromNib] 吗?(是 NSViewController 实现 awakeFromNib 吗?)
- 如果答案 1 是肯定的,这是一个好的解决方案吗?:
如果答案 1 是否定的,这是一个好的解决方案吗?:
谢谢
objective-c - 添加子视图到 NSView 显示,但不能删除
在我的应用程序窗口中,我有两个 NSView。左侧的 NSView(“菜单”)包含几个按钮。单击其中一个按钮时,它应该更改右侧 NSView 的内容(“内容”)。
对于右侧的每个视图,我都有一个单独的 NSViewControllers 被加载,它们的视图被添加为子视图。当在左侧按下另一个按钮时,应删除右侧添加的子视图,并且应将新视图作为子视图加载。
为此,我在 AppDelegate 中加载了我的菜单,其中包含以下内容:
这工作正常。如您所见,我在 Menu VC 中有一个 NSView 指针,它指向 contentView,以便我可以用子视图填充它。
现在,作为其中一个按钮按下的方法,我执行以下操作:
这不起作用。
但是,如果我从 MenuViewController 实现的 awakeFromNib 方法添加一个子视图(在应用程序打开时的默认内容的情况下)它可以工作。但是,当我尝试使用删除该子视图时
我不能。有趣的是,如果我尝试计算子视图的数量(即使在 awakeFromNib 方法中添加了一个),它也会为 self.contentView 返回 0 个子视图。为什么?我怎样才能让它正常工作?
谢谢