我正在开发一个macOS应用程序,我想处理一个本地热键事件(命令+向上箭头键)NSViewController.
以下是我使用Swift的方法:
override func keyDown(with event: NSEvent) {
let modifierkeys = event.modifierFlags.intersection(.deviceIndependentFlagsMask);
let hasCommand = modifierkeys == .command;
switch Int(event.keyCode) {
case kVK_UpArrow where hasCommand:
print("command up");
break;
case kVK_ANSI_B where hasCommand:
print("command B");
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
当我在视图中构建并按下命令+向上时,控制台不显示任何内容.但是当我按下命令+ B时,"命令B"被注销.
那么为什么这不适用于Command +?我该怎么做到这一点?
我正在使用故事板开发 Mac 应用程序。我有一个窗口,它显示一个NSViewController作为其内容的窗口,其中包含一个嵌入NSSplitViewController.
预期的行为是作为NSSplitViewController响应者链的一部分,这样触发toggleSidebar第一响应者操作的菜单项实际上会折叠NSSplitViewController标记为侧边栏的项。
但是,这根本不会发生并且菜单项保持禁用状态。所以我的问题是,我如何才能NSSplitViewController成为响应者链的一部分?
我有一个简单的布局,它包含NSView及其子视图NSTextView.NSTextView以编程方式填充了一些产生多行的文本.我使用自动布局(所有以编程方式完成)将所有内容绑定在一起.但是,当显示所有内容时,NSTextView被切断,只显示一行.
搜索网络后,我能找到的最佳答案是:
但是,这只有在我显示所有内容后手动更改NSTextView中的文本时才有效(这不是我的用例).视图重新调整,并显示整个NSTextView.
我试图找出NSViewController何时完成布局子视图,以便我可以调用invalidateIntrinsicContentSizeNSTextView.相当于viewDidLayoutSubviewsUIViewController.
到目前为止我没有尝试过任何工作.我试图调用invalidateIntrinsicContentSizeNSTextView:
loadView有没有更好的方法来实现这一目标?
有人可以向我解释如何在Swift和xcode 6中的NSViewController上设置acceptsFirstResponder吗?
该程序不允许任何覆盖该函数,并表示它不存在于超类中,但我也不能将其设置为变量,如:
self.acceptsFirstResponder = true
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
我有一个带有多个 ViewController 的应用程序,我需要检查 AppDelegate 中当前哪个 ViewController 处于活动状态。例如,我将创建一个运行函数的计时器,该函数检查特定的 ViewController 是否处于活动状态,如果是,则执行一些操作。有没有办法做到这一点?
我有很多iOS经验,但Cocoa让我有些困惑.我阅读了几篇关于Cocoa的Apple文档,但仍然有一些我在任何地方都找不到的细节.看来文档是在基于NSDocument的Xcode模板更新为使用NSViewController之前编写的,所以我不清楚我应该如何组织我的应用程序.该模板使用NSWindow NSViewController创建一个故事板.
我的理解是我应该将NSWindowController或NSWindow子类化为对我的模型对象的引用,并在makeWindowControllers()中设置它.但是,如果我想使用NSViewController而不是只是将所有内容放在窗口中,我还需要以某种方式访问我的模型.我注意到在我的视图控制器中有一个叫做RepresentObject的东西,它似乎意味着要保存一些模型对象(然后被强制转换),但它总是为零.这是如何设置的?
我发现很难正确地提出这个问题,但我想我的问题是:如何在基于文档的应用程序中正确使用NSViewController?
PS:我知道NSWindowController通常用于管理多个窗口,这些窗口作用于一个文档,所以假设我只需要一个窗口,那么我就不需要NSWindowController.但是,要求可能会改变,从长远来看使用NSWindowController可能会更好,对吧?
cocoa nsdocument nsviewcontroller nswindowcontroller xcode-storyboard
如何使用swift处理窗口的关闭事件,例如,询问"你确定要关闭表单吗?"
表格将在"是"的情况下关闭,在"否"的情况下不关闭.显示消息框对我来说不是问题.
viewWillDisappear()也适用于最小化,但我只需要关闭事件.
谢谢.
所以我提出一个NSViewController作为一个窗口的工作表已禁用调整大小,但仍然可以调整显示为工作表的视图控制器.
如何禁用NSViewController的大小调整?
有没有办法在OSX中将窗口置于屏幕中心?
我正在使用下面的代码,但它改变了大小而不是屏幕上的位置.
override func viewDidLoad() {
super.viewDidLoad()
let ScreenStart = NSSize(width: (NSScreen.mainScreen()?.frame.width)! / 1.5, height: (NSScreen.mainScreen()?.frame.height)! / 1.5)
self.view.frame.size = ScreenStart
self.view.frame.origin = NSPoint(x: (NSScreen.mainScreen()?.frame.origin.x)!/2, y: (NSScreen.mainScreen()?.frame.height)! / 2)
}
Run Code Online (Sandbox Code Playgroud) I'm adding a subview(NSView), here is my code:
override func viewDidAppear() {
self.view.needsDisplay = true
let newView = NSView()
newView.autoresizesSubviews = true
newView.frame = view.bounds
newView.wantsLayer = true
newView.layer?.backgroundColor = NSColor.green.cgColor
view.addSubview(newView)
}
Run Code Online (Sandbox Code Playgroud)
And it works fine
But when I resize the window the subview is not resizing.
Any of you knows why or how can make the subview resize with superview?
I'll really appreciate your help
nsviewcontroller ×10
swift ×6
cocoa ×5
macos ×5
objective-c ×2
nsdocument ×1
nsevent ×1
nsview ×1
swift2 ×1
xcode10.2 ×1
xcode6 ×1