How to display a view from a NSViewController?
我是 Objective-c 的新手,所以请多多包涵。我有一个从网络摄像头返回图片的类,我正在尝试将其显示到屏幕上。我将 NSViewController 子类化以从相机类中获取图像并将其设置为实例 NSImageView 并将 NSViewController 的视图设置为 NSImageView。我在 Interface Builder 中创建了一个自定义视图,将一个 NSViewController 对象拖到 MainMenu.xib 中,将它的类设置为 PhotoGrabberController,并控制从自定义视图中单击拖动到 PhotoGrabberController 以将其出口绑定设置为视图。 (我真的不知道这在幕后是如何运作的,对我来说这似乎很神奇)。屏幕上什么都没有显示,我一直在玩这个。
在 PhotoGrabberController.h
中
1
2 3 4 5 |
@interface PhotoGrabberController : NSViewController {
PhotoGrabber * grabber; NSImageView* iView; } @property (nonatomic, retain) NSImageView* iView; |
在 PhotoGrabberController.m
中
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@implementation PhotoGrabberController
@synthesize iView,grabber; – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { } – (void) awakeFromNib |
我曾尝试在 AppDelegate 的 applicationDidFinishLaunching 中放置一堆不同的东西,但现在它的设置方式我认为我不需要在其中放置任何东西。
问题
How do I get the main window to show the image?
这是视图的工作。
既然你已经有了一个视图,你只需要把它放到窗口中。一个窗口只直接持有一个视图,称为它的内容视图;最有可能的是,您希望将视图控制器的视图添加为已经是内容视图的视图的子视图,或者作为其他孙子视图的子视图。
Is it ok to use PhotoGrabberController.view instead of creating a view subclass?
这些是正交的。 VC 的视图是视图类的一个实例。创建类与使用实例无关。
我认为创建视图子类不会对您有所帮助。你已经有两个工作视图:一个普通的 NSView 作为 VC 的直接视图,一个 NSImageView 在里面。不需要子类将这些添加到视图中,其中图像视图位于窗口中。
What is wrong with my understanding of how things work here?
您已经错过了视图层次结构的整个概念,以及这样一个层次结构是每个窗口显示其内容的方式这一事实。
另外,您的问题以€?我是 Objective-ca 的新手? (原文如此),但您的问题是关于 Cocoa 框架(特别是 AppKit 框架),而不是 Objective-C 语言。
Can you direct me to a resource where I can fully understand how this works?
窗口编程指南(特别是?Windows 如何工作?)和视图编程指南(特别是,使用视图层次结构?)。
- 嗨,感谢您的详尽回答。我认为我对问题二的措辞不正确。我的意思是问,创建 PhotoGrabberController.view 而不是创建 NSView 子类的实例并使用它有什么区别? PhotoGrabberController.view 只是 NSView 的常规实例吗?
- @user1267383:您可以在 VC 的 nib 中看到 VC 的视图是什么类型的对象。选择视图并查看大纲检查器。默认情况下,是的,VC 的视图是普通的 NSView。在这种情况下,除了一种方法是在 nib 中创建所有内容而另一种方法是在代码中创建所有内容之外,没有任何区别。
- 不是那么彻底,只是一个措辞优美的 RTFM \\’answer.\\’ 代码总是更好。否则,我完全有能力自己解释高级概念。当寻找技术的人不小心点击了这样的”答案”时,这完全是在浪费他们的时间。
- @johnrubythecat 我在同一条线上看到了很多来自您的批评:没有准备好复制和粘贴的代码不仅意味着答案不佳,而且回答者不知何故对您造成了人身侮辱。轻点。
- @johnrubythecat 实际上,在您自己的十个答案中(实际上并不是不恰当地发布为答案的问题),您似乎与您批评的人一样内疚。如果你要指责别人”浪费你的时间”,也许你应该自己树立一个更好的榜样。或向您的医生咨询锂。
- @Joshua Nozzi,对于人们获得他们实现心理健康所需的医疗保健已经有太多的耻辱,而不是批评那些去看精神科医生并被处方锂的人。
- @Kaydell 有趣的是,这些天我们是如此的 PC,我们甚至不允许暗示某人精神不稳定……因为这可能会使精神不稳定的人感到不安。感谢布道。现在走开。
来源:https://www.codenong.com/9861863/