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

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

在" 属性"检查器中,我输入了要加载的笔尖的名称.

我已将视图控制器对象的视图插座连接到MainMenu.xib中的现有视图.

最后,我点击Cmd + R,我的观点不存在.
[在这里插入FFFFUUUUU meme的图像.]
我错过了什么?过去两周我一直盯着我的Mac日复一日,所以如果我完全遗漏了一些东西,我也不会感到惊讶.如果有人看到我的n00b方式,并愿意指出我正确的方向,我会非常感激.谢谢.
我正在尝试从我的NSViewController类执行AppDelegate中存在的方法。我尝试了以下行来访问AppDelegate:
let appDelegate = UIApplication.shared.delegate as! AppDelegate;
Run Code Online (Sandbox Code Playgroud)
没有成功:使用未解析的标识符“ UIApplication”。试图导入UIKit,不起作用...因为它用于IOS?
PS:很难学习如何快速开发……很多教程是针对目标C的,而Swift也可以是针对IOS的...
我有一个 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 …
我有一个NSWindowController包含几个NSViewControllers.我想普遍接受使用NSWindowController类的拖放事件,而不是被其他视图拦截NSTextView(包含在a中NSViewController)
如何判断NSTextView忽略拖放事件?
drag-and-drop nstextview nsviewcontroller nswindowcontroller
我是一个可可和Objective-c新手.我正在尝试构建一个mac应用程序,当我尝试创建一个继承自NSViewController的新控制器时,它会自动给我一个- (void)viewDidLoad.m文件(但不是.h).问题是编译器总是喊叫"没有可见的@interface for'NSViewContoller'声明了选择器'viewDidLoad'.
这怎么可能?请帮助我了解这里发生了什么以及如何解决它.谢谢.
我正在尝试使用 swift for OS X 从笔尖添加一个新的子视图。
到目前为止,我已经:
我想在应用程序加载时将此子视图添加到我的主视图中。
在我的 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)
我意识到我需要调整这个子视图的大小和位置,但我似乎无法做到这一点。
我花了一天的大部分时间试图解决这个问题,所以任何帮助都将不胜感激。
我一直在制作iOS应用程序已经有一段时间了,我决定我也想开始为Mac制作一些这些应用程序.
我的问题是:有没有需要一个NSWindow,现在开发的Mac与iOS非常相似?
所以我使用Xcode创建了一个简单的cocoa应用程序,它带有一个名为"Main"的故事板,就像在iOS上一样.
在该storyboard文件中,有一个NSWindow,然后链接到NSViewController.
我可以摆脱那个NSWindow吗?当我尝试将NSViewController设置为"初始控制器"时,应用程序仍能正常工作.那么NSWindow的意义何在?
还有什么课程链接到NSWindow?我试图模糊NSWindow的背景,但我无法将代码链接到NSWindow.
对不起我的愚蠢问题,但我对OS X的开发完全不熟悉.
谢谢你的时间,丹.
我正在尝试从按下 NSMenuItem 时启动的函数打开 NSViewController。
func settings (sender: NSStatusBarButton) {
//open NSViewController here?
}
Run Code Online (Sandbox Code Playgroud) 我是新手 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)
我将不胜感激任何建议,或指向任何可能对我有帮助的文档或教程的指针。
我已经开始使用NSViewControllers,我不能在我的生活中弄清楚如何通过NSViewController将内容从CoreData实体获取到TableView(例如)?
我有一个带有自定义视图的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) 我希望用户可以通过按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
nsviewcontroller ×13
cocoa ×9
macos ×9
objective-c ×4
swift ×4
xcode ×3
nsmenuitem ×2
nsview ×2
appdelegate ×1
core-data ×1
function ×1
nib ×1
nsimageview ×1
nspopover ×1
nstableview ×1
nstextview ×1
nswindow ×1