【发布时间】:2016-01-26 07:23:28
【问题描述】:
我是 Mac OSX 的新手,并且随着 Apple 宣传代码体变得相似这一事实,我决定告诉人们我正在编写代码,因为我们应该能够制作 Mac OSX 版本。 iPhone 和 iPad 版本都很好,即将发布第二个版本,所以没有问题。
所以我将 NSWindowController 子类化以访问工具栏并制定了如何删除和添加工具栏上的项目,但对于我来说,我无法让一个 NSViewController (firstViewController) 关闭并调出第二个 NSViewController (secondViewController) 在同一个 NSWindowController 中。
所以这两个问题是 1.我希望能够从代码中的第一个 NSViewController 执行SegueWithIdentifier 和 2. 通过在同一个 NSWindowController 中替换第一个 NSViewController 来调出第二个 NSViewController。
如果我将一个按钮添加到 firstViewController 并将 segue 放置到 secondViewController 那么当我选择按钮时 secondViewController 出现就好了,但是在一个单独的窗口中不是我想要它的同一个 NSWindowController 并且 firstViewController 没有得到被替换但留在 NSWindowController 中。
所以我知道 segue 的想法会起作用,但它在代码中不起作用,当我从按钮插入 segue 时,它会起作用,但会插入不属于 NSWindowController 的单独 NSViewController。
我正在尝试从 Apple 那里找到一些关于这个问题的编程指南,但到目前为止还没有运气。
这是我的故事板中的概述:
这是我的 NSWindowController 的子类,函数 loginToMe2Team 是从 NSToolBar 触发的,它的工作只是在控制台上显示打印语句时找到。
import Cocoa
class me2teamWindowsController: NSWindowController {
@IBOutlet var mySignUp : NSToolbarItem!
@IBOutlet var myToolbar : NSToolbar!
let controller = ViewController()
override func windowDidLoad() {
super.windowDidLoad()
print("window loaded")
}
override func windowWillLoad() {
print("window will load")
}
@IBAction func logInToMe2Team(sender: AnyObject){
controller.LogIn() //THIS IS THE FUNC I AM TESTING WITH
}
@IBAction func signUpToMe2Team(sender: AnyObject){
controller.signUp()
}
这是我的 NSViewController 使用 func LogIn 的子类。它的选择很好,但 performSegueWithIdentifier 不是。我确实剪切并跳过了标识符以确保它是相同的。
import Cocoa
import WebKit
class ViewController: NSViewController {
@IBOutlet weak var theWebPage: WebView!
@IBOutlet weak var progressIndicator: NSProgressIndicator!
override func viewDidLoad() {
super.viewDidLoad()
let urlString = "https://thewebpage.com.au"
self.theWebPage.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: urlString)!))
}
override func viewDidAppear() {
}
func LogIn() {
print("I logged in")
self.performSegueWithIdentifier("goToTeamPage", sender: self)
//THIS IS THE BIT THATS NOT WORKING
}
func signUp() {
print("I have to sign up now")
}
override var representedObject: AnyObject? {
didSet {
}
}
func webView(sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!)
{
self.progressIndicator.startAnimation(self)
}
func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!)
{
self.progressIndicator.stopAnimation(self)
}
}
【问题讨论】:
-
如果有人有解决方案,仍然真的需要这个问题的答案。
标签: xcode macos swift storyboard osx-elcapitan