标签: nsviewcontroller

如何从NSViewController显示视图?

我是Objective-c的新手所以请耐心等待.我有一个类从网络摄像头返回图片,我试图将其显示在屏幕上.我将子类NSViewController从相机类中获取并将其设置为实例NSImageView,并将其NSViewController视图设置为NSImageView.我在Interface Builder中创建了一个自定义视图,将一个NSViewController对象拖到MainMenu.xib中,将它的类设置为PhotoGrabberController,并从自定义视图中单击拖动控件到PhotoGrabberController,将其出口绑定设置为视图.(我真的不知道幕后是怎么回事,对我来说似乎很神奇).没有任何东西出现在屏幕上,我一直在玩这个.

在PhotoGrabberController.h中

@interface PhotoGrabberController : NSViewController {
    PhotoGrabber * grabber;
    NSImageView* iView;
}
@property (nonatomic, retain) NSImageView* iView;
Run Code Online (Sandbox Code Playgroud)

在PhotoGrabberController.m中

@implementation PhotoGrabberController
@synthesize iView,grabber;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

    }
    return self;
}

- (void) awakeFromNib
{
    self = [super init];
    if (self) {
        NSRect rect = NSMakeRect(10, 10, 200, 100);
        iView = [[NSImageView alloc] initWithFrame:rect];
        [iView setImageScaling:NSScaleToFit];
        [iView setImage:[NSImage imageNamed:@"picture.png"]];
        grabber = …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c nsviewcontroller nsimageview

2
推荐指数
1
解决办法
2120
查看次数

NSView,NSViewController和MainMenu.xib究竟是如何组合在一起的?

我要切入追逐:我的应用程序已经增长了很多,现在我觉得是时候做一些整理了.我想将我的一些视图从我的MainMenu.xib文件中分离到他们自己的Nib文件中.绊倒我的部分是整个"Interface Builder + My Code"的事情.这是我到目前为止所做的:

  1. 我添加了一个视图控制器代理对象:
    在Interface Builder对象浏览器中查看Controller对象

  2. Identity检查器中,我已将视图控制器的类名添加到Custom Class字段中.
    Interface Builder中的Identity Inspector

  3. 在" 属性"检查器中,我输入了要加载的笔尖的名称. Interface Builder中的Nib Name字段

  4. 我已将视图控制器对象的视图插座连接到MainMenu.xib中的现有视图.
    在Interface Builder中查看View Controller上的Outlet

  5. 最后,我点击Cmd + R,我的观点不存在.
    [在这里插入FFFFUUUUU meme的图像.]

我错过了什么?过去两周我一直盯着我的Mac日复一日,所以如果我完全遗漏了一些东西,我也不会感到惊讶.如果有人看到我的n00b方式,并愿意指出我正确的方向,我会非常感激.谢谢.

cocoa interface-builder nsview nib nsviewcontroller

2
推荐指数
1
解决办法
3561
查看次数

从NSViewController访问AppDelegate方法

我正在尝试从我的NSViewController类执行AppDelegate中存在的方法。我尝试了以下行来访问AppDelegate:

let appDelegate = UIApplication.shared.delegate as! AppDelegate;
Run Code Online (Sandbox Code Playgroud)

没有成功:使用未解析的标识符“ UIApplication”。试图导入UIKit,不起作用...因为它用于IOS?

PS:很难学习如何快速开发……很多教程是针对目标C的,而Swift也可以是针对IOS的...

macos nsviewcontroller appdelegate swift

2
推荐指数
1
解决办法
1118
查看次数

如何定位NSPopover

我有一个 OSX 应用程序,它使用 NSViewController 在我的 NSView 中交换输入输出视图。其中一种视图是 NSOutlineView。我现在想要在用户双击大纲视图中的一行时出现 NSPopover。目前我使用以下方法来显示弹出窗口:

NSRect theRect = [[NSApp keyWindow] convertRectFromScreen: NSMakeRect(700, 400, 5, 5)];
[myPopover showRelativeToRect: theRect // Window Coordinates
                        ofView: [[NSApp keyWindow] contentView]
                 preferredEdge: NSMinYEdge];
Run Code Online (Sandbox Code Playgroud)

这使得 NSPopover 出现在应用程序的底部。这有效,但我希望能够让弹出框正好出现在 NSOutlineView 的点击行下方。我交换进出的每个视图都由 NSViewController 控制,我想我可以使用 NSViewController 的 view 属性识别我的视图位置。但是,如果我替换[[NSApp keyWindow] contentView]myViewController.view我收到错误,即视图没有窗口并且 NSPopover 崩溃。显然,我遇到了麻烦 1) 在 NSView 中找到相对于主窗口的点击行的坐标 2) 理解为什么我的视图没有窗口。如果有人有可以帮助我理解这些问题的建议,我将不胜感激。

2013 年 6 月 2 日更新我仍在努力解决我的问题,但我发现如果我通过 MainWindowController (myControlledView) 访问其属性,我可以获得正确的视图坐标。然后当我询问视图的原点和框架大小时,我得到了正确的值。我的 VC 将自定义视图加载为 NIB 文件,当我询问加载视图的来源时,我得到 (0,0)。我认为即使我将视图作为 NIB 加载,视图相对于窗口的位置也会保持不变?我可以将视图原点传递给我的 VC,从而正确设置 NSPopover 但这看起来相当麻烦,我认为可以通过 VC 正确访问 NIB …

cocoa nsoutlineview nsview nsviewcontroller nspopover

1
推荐指数
1
解决办法
3215
查看次数

如何禁用NSTextView上的拖放?

我有一个NSWindowController包含几个NSViewControllers.我想普遍接受使用NSWindowController类的拖放事件,而不是被其他视图拦截NSTextView(包含在a中NSViewController)

如何判断NSTextView忽略拖放事件?

drag-and-drop nstextview nsviewcontroller nswindowcontroller

1
推荐指数
2
解决办法
1003
查看次数

'viewDidLoad'未在NSViewController中声明?

我是一个可可和Objective-c新手.我正在尝试构建一个mac应用程序,当我尝试创建一个继承自NSViewController的新控制器时,它会自动给我一个- (void)viewDidLoad.m文件(但不是.h).问题是编译器总是喊叫"没有可见的@interface for'NSViewContoller'声明了选择器'viewDidLoad'.

这怎么可能?请帮助我了解这里发生了什么以及如何解决它.谢谢.

macos cocoa objective-c nsviewcontroller

1
推荐指数
1
解决办法
1408
查看次数

OS X addsubview从xib快速

我正在尝试使用 swift for OS X 从笔尖添加一个新的子视图。

到目前为止,我已经:

  • 创建了一个新的“可可应用程序”
  • 添加了一个名为“TestSubView”的新“Cocoa Class”作为带有 XIB 文件的 NSViewController 的子类

我想在应用程序加载时将此子视图添加到我的主视图中。

在我的 ViewController (主窗口的 ViewController )中,我有。

import Cocoa

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let newSubView = TestSubView();
        self.view.addSubview(newSubView.view);

    }

    override var representedObject: AnyObject? {
        didSet {
        // Update the view, if already loaded.
        }
    }


}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误

Failed to set (contentViewController) user defined inspected property on (NSWindow): 
-[NSNib initWithNibNamed:bundle:] could not load the nibName: temp.TestSubView in bundle (null).
Run Code Online (Sandbox Code Playgroud)

我意识到我需要调整这个子视图的大小和位置,但我似乎无法做到这一点。

我花了一天的大部分时间试图解决这个问题,所以任何帮助都将不胜感激。

macos xcode cocoa nsviewcontroller swift

1
推荐指数
1
解决办法
1万
查看次数

NSWindow vs ViewController - OS X - Cocoa

我一直在制作iOS应用程序已经有一段时间了,我决定我也想开始为Mac制作一些这些应用程序.

我的问题是:有没有需要一个NSWindow,现在开发的Mac与iOS非常相似?

所以我使用Xcode创建了一个简单的cocoa应用程序,它带有一个名为"Main"的故事板,就像在iOS上一样.

在该storyboard文件中,有一个NSWindow,然后链接到NSViewController.

我可以摆脱那个NSWindow吗?当我尝试将NSViewController设置为"初始控制器"时,应用程序仍能正常工作.那么NSWindow的意义何在?

还有什么课程链接到NSWindow?我试图模糊NSWindow的背景,但我无法将代码链接到NSWindow.

对不起我的愚蠢问题,但我对OS X的开发完全不熟悉.

谢谢你的时间,丹.

macos xcode cocoa nswindow nsviewcontroller

1
推荐指数
1
解决办法
2583
查看次数

从函数打开 NSViewController。菜单栏应用

我正在尝试从按下 NSMenuItem 时启动的函数打开 NSViewController。

func settings (sender: NSStatusBarButton) {

    //open NSViewController here?

}
Run Code Online (Sandbox Code Playgroud)

macos function nsviewcontroller nsmenuitem swift

1
推荐指数
1
解决办法
1306
查看次数

如何在 OS X 应用程序中限制第二个 NSViewController 最小尺寸?

我是新手 Mac OS X 开发人员。我认为这是一个简单的问题,但我无法通过搜索找到任何有用的结果。

如何限制第二个视图控制器的大小?

我从一个简单的 Mac OS X 应用程序开始,只有一个视图控制器。我可以选择包含视图控制器的窗口,然后选择“大小检查器”并选中“最小内容大小”框,并为窗口指定最小 x 和 y。

这允许我指定第一个视图控制器的最小尺寸,正如我所期望的。一切都很好。

然后我添加了第二个视图控制器,带有来自第一个视图控制器的 Modal segue,由按下按钮触发。我将 NSTextView 添加到第二个视图控制器,以显示属性字符串。文本视图工作正常,正确显示属性字符串。这个文本视图是一个单独的窗口,没有最小尺寸限制。

那么如何为第二个视图控制器视图指定最小尺寸?这通常是在 Interface Builder 中完成还是以编程方式完成?当我使用文档大纲逐步浏览视图层次结构时,我看不到如何使用大小检查器指定最小大小。我错过了什么吗??

这是我的简化代码:

文件“ViewController.swift”

class ViewController: NSViewController {
...
override func prepare(for segue: NSStoryboardSegue, sender: Any?) {
    let secondVC: SecondViewController = segue.destinationController as! SecondViewController
    secondVC.reportAttrString = myReport.reportText
    }
...
}
Run Code Online (Sandbox Code Playgroud)

文件“SecondViewController.swift”

class SecondViewController: NSViewController {
    var reportAttrString = NSMutableAttributedString()

    @IBOutlet var ReportTextView: NSTextView!
}
Run Code Online (Sandbox Code Playgroud)

我将不胜感激任何建议,或指向任何可能对我有帮助的文档或教程的指针。

macos xcode nsviewcontroller swift

1
推荐指数
1
解决办法
1872
查看次数

将CoreData内容传递给NSViewController

我已经开始使用NSViewControllers,我不能在我的生活中弄清楚如何通过NSViewController将内容从CoreData实体获取到TableView(例如)?

cocoa core-data objective-c nstableview nsviewcontroller

0
推荐指数
1
解决办法
395
查看次数

具有自定义视图的NSMenuItem不会更新

我有一个带有自定义视图的NSMenuItem.但是,当我想更新菜单中的第一行时,它会将内容添加到xib文件中,而不是像我设置的那样.

我的代码:AppDelegate.m:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    _helper = [[Helper alloc] init];

    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [statusItem setMenu:self.statusMenu];
    [statusItem setTitle:@"GravAccount"];
    [statusItem setHighlightMode:YES];

    _gravatarLoader = [[GravatarLoader alloc] initWithTarget:self andHandle:@selector(setGravatarImage:)];

    // Get email address
    _email = [_helper getEmailAddress];

    if (_email != nil)
    {
        [_gravatarLoader loadEmail:_email withSize:50.0];
    }
}

- (void)setGravatarImage:(NSImage*)image
{
    NSLog(@"Image loaded!");

    GravatarMenuItem *menuItem = [[GravatarMenuItem alloc] initWithNibName:@"GravatarMenuItem" bundle:nil];
    [menuItem.label setTitle:_email];
    [menuItem.imageView setImage:image];

    NSLog(@"Email: %@", _email);

    NSMenuItem *item = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
    [item setView:menuItem.view];

    [self.statusMenu removeItemAtIndex:0];
    [self.statusMenu insertItem:item atIndex:0]; …
Run Code Online (Sandbox Code Playgroud)

macos cocoa objective-c nsviewcontroller nsmenuitem

0
推荐指数
1
解决办法
1270
查看次数

如何通过按ESC键关闭窗口(NSWindowController)?

问题

我希望用户可以通过按ESC键关闭一个窗口,但我不能让它在这种特定情况下工作,按ESC键会触发错误声音("你不能那样做"macOS bloop)没有任何反应.

上下文

我正在创建NSWindowController的子类,它本身创建一个NSViewController子类的实例并在视图中设置它.两个控制器都有自己的xib文件.

NSWindowController:

final class MyWindowController: NSWindowController, NSWindowDelegate {

    @IBOutlet weak var targetView: MainView!

    let myVC: MyViewController!
    var params: SomeParams!

    override func windowDidLoad() {
        super.windowDidLoad()
        myVC = MyViewController(someParams: params)
        myVC.view.setFrameSize(targetView.frame.size)
        myVC.view.setBoundsSize(targetView.bounds.size)
        targetView.addSubview(myVC.view)
    }

    override var windowNibName: String! {
        return "MyWindowController"
    }

    convenience init(someParams params: SomeType) {
        self.init(window: nil)
        self.params = params
    }

}
Run Code Online (Sandbox Code Playgroud)

NSViewController:

final class MyViewController: NSViewController {

    convenience init(someParams params: SomeType) {
        // do stuff with the params
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // …
Run Code Online (Sandbox Code Playgroud)

macos cocoa first-responder nsviewcontroller nswindowcontroller

-1
推荐指数
2
解决办法
1484
查看次数