我无法理解如何以单一窗口应用程序在Mac OS X中工作的最佳方式设计应用程序.我更喜欢单个文档 - 单窗口应用程序(我不编写实用程序应用程序),但目前尚不清楚我应该初始化一个窗口内容.
在iOS上,我应该使用根视图控制器-[UIViewController viewDidLoad]或-[UIViewController viewWillAppear:]方法来实现此目的.
你可以请教我任何教程或解释如何处理NSDocument - NSDocumentController - NSWindowController - NSViewController类?
谢谢你的回答.:-)
我已经花了整整2天试图弄清楚如何使用NSViewControllers来创建一个多视图应用程序.
这就是我的工作.
我有2个视图控制器和MainMenu.xib的窗口.我还有一个AppController,它是两个视图控制器的委托.
当我启动应用程序时,我首先会遇到MainMenu.xib的Window视图,其中包含一个按钮.单击此按钮,IBAction将发送到appController,并要求SecondViewController显示它的nib.到目前为止,一切都很好,nib文件正确显示.
在secondViewController上,还有另一个按钮,它将另一个IBAction发送到appController,并要求显示FirstViewController,但没有任何反应,没有崩溃,没有警告......任何帮助都将非常感谢...提前感谢您的耐心等待. ..
这是AppController.h的代码:
#import <Foundation/Foundation.h>
#import "SecondViewController.h"
#import "FirstViewController.h"
@interface AppController : NSObject
@property (strong) IBOutlet NSWindow *mainWindow;
@property (strong) IBOutlet SecondViewController *secondViewController;
@property (strong) IBOutlet FirstViewController *firstViewController;
- (IBAction)secondButtonfromsecondViewControllerClicked:(id)sender;
- (IBAction)buttonClicked:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
这是AppController.m的代码:
#import "AppController.h"
@implementation AppController
@synthesize mainWindow = mainwindow;
@synthesize secondViewController;
@synthesize firstViewController;
- (IBAction)buttonClicked:(id)sender {
NSLog(@"button from second View Controller clicked");
self.secondViewController = [[SecondViewController
alloc]initWithNibName:@"SecondViewController" bundle:nil];
self.mainWindow.contentView = self.secondViewController.view;
[self.secondViewController.view setAutoresizingMask:NSViewWidthSizable |
NSViewHeightSizable];
}
- (IBAction)secondButtonfromsecondViewControllerClicked:(id)sender {
NSLog(@"button from first ViewController clicked"); …Run Code Online (Sandbox Code Playgroud) 我目前的Swift代码
var appBundle = NSBundle.mainBundle()
let controller: ViewController = ViewController.init(nibName: "ViewController", bundle: nil)
self.window.contentView.addSubview(controller.view)
controller.view.frame = self.window.contentView.bounds
Run Code Online (Sandbox Code Playgroud)
得到两个错误.一个是"类型名称后的预期成员名称或构造函数调用",另一个是"()不能转换为'ViewController'.作为参考,ViewController是一个继承自NSViewController的类.
这两个错误都发生在第二行代码上.提前致谢.
这是按钮动作:
@IBAction func readyPressed(sender: NSButton) {
self.dismissController(Hardness)
println(1)
self.performSegueWithIdentifier("manual", sender: self)
}
Run Code Online (Sandbox Code Playgroud)
当我按下按钮,println工作,segue工作,但NSViewController"硬度"不关闭
所以也许这很容易而且我很密集但是..
我试图从我的 MenuBarController 以编程方式打开一个显示在我的 main.storyboard 上的视图控制器。视图控制器没有附加任何转场,但我给视图控制器一个故事板 ID 测试。
这是针对 OS X 的,所以很抱歉我是故事板和 Segue 功能的新手。
我一直在尝试这个:
let storyBoard = NSStoryboard(name: "Main", bundle: nil)! as NSStoryboard
let myViewController = storyBoard.instantiateControllerWithIdentifier("test") as NSViewController
self.presentViewControllerAsModalWindow(myViewController)
Run Code Online (Sandbox Code Playgroud)
但是收到一个错误:
[NSNib initWithNibNamed:bundle:] 无法加载包中的 nibName: TestApp.MenuBarController (null)。
我正在开发一个简单的 OS X Cocoa 应用程序,其中用户填写表单,应用程序执行一些在其他字段中弹出的计算。
我从 Xcode 6.3.2(适用于 Yosemite)上默认的基于文档的应用程序模板开始。该模板包含 NSDocument 的子类和 NSViewController 的子类。该接口在 Storyboard 中定义。NSDocument 在 makeWindowControllers 中从 Storyboard 初始化接口。
我在将接口片段绑定到 ViewController 的representedObject 时遇到了麻烦——结果我绑定到了 nil。ViewController 的 setRepresentedObject 方法永远不会被调用。
我尝试让 ViewController 在 viewDidLoad 中调用 setRepresentedObject 本身,但当时尚未设置 WindowController 的文档属性(它返回 nil)。
我不清楚是否可以从 NSDocument 获取 ViewController 的实例 - NSDocument 知道它的 window/WindowController,但我不确定如何从这些类中找到 ViewController。
我想知道 Xcode/Apple 的惯用方式来做到这一点。无论是通过故事板视图还是在我的代码中以编程方式实现。
如果可能的话,我还想避免代码耦合得太紧密。
在我尝试添加NSPageController时的故事板上,它出现了它自己的视图.
当我想使用拆分视图时,我可以添加一个NSSplitViewController或只是一个拆分视图.我更喜欢在里面使用SplitView NSViewController.
无论如何我可以使用NSPageController内部NSViewController,然后选择一个子视图作为我的NSPageController内容?故事板不允许我将PageController放在View Controller中.有任何想法吗?
将 Swift 2.0 用于 OS X (10.9) 应用程序,我希望以编程方式将容器视图中的视图控制器(选项卡视图控制器)切换到另一个视图控制器(即用另一个视图控制器替换选项卡视图控制器)。当在任一选项卡视图上单击“安装”按钮并且满足某些条件(因此需要以编程方式执行此操作)时,就会发生这种情况。我不想使用转场(除非自定义转场替换窗口,而不是打开模态等)。
我是 Swift 和 mac 开发的初学者,并且没有运气从可靠且易懂的来源(对于初学者)找到我知道应该非常简单的解决方案。
在我的 macOS 应用程序中,我有菜单项,它们也在主 UI 中复制。应用程序由主窗口及其委托和单个视图及其视图控制器组成。在应用程序委托中,我捕获菜单项单击操作,然后我需要将此事件发送到我的视图控制器,以便采取适当的操作并更新主 UI。
问题是如何NSViewController从应用程序委托访问我的视图控制器 ( )?
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
macos ×6
swift ×6
cocoa ×4
objective-c ×3
nsstoryboard ×2
xcode ×2
appdelegate ×1
ios ×1
multiview ×1
nsdocument ×1
nsview ×1
xcode10.2 ×1
xcode7 ×1