2016-04-24 10 views
0

Thxをは、更新され、正しいコードは以下のようになります。代議員関数、参照を渡す方法?私の問題を解決オースティンへ

self.presentViewControllerAsSheet(自己: (次のコードは、問題を説明:)

import Cocoa 

class MyViewController1 : NSViewController, myProtocol { 

// Identifier MyViewController2ID is set in storyboard for class MyViewController2 
lazy var myViewController2: NSViewController = { 
    return self.storyboard!.instantiateControllerWithIdentifier("MyViewController2ID") 
     as! NSViewController 
}() 

// ViewController conforms to protocol 
func myFunction() { 
    // do something 
} 

// ... some action 
// presenting new viewcontroller as sheet 
// new controller is presented and is dismissed 
// when self.dismissController(self) is called 
// in MyViewController2 

self.presentViewControllerAsSheet(self.myViewController2) 
} 

protocol myProtocol : class { 
func myFunction() 
} 

// Identifier MyViewController2ID for class 
// MyViewController2 is set in storyboard 
class MyViewController2 : NSViewController { 

weak var delegate:myProtocol? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    ... 
    if let pvc = self.presentingViewController as? MyViewController1 { 
     self.delegate = pvc 
    } 
} 
// function is activated 
func someFunction() { 
    self.delegate?.myFunction() 
    self.dismissController(self) 
    } 

} 

MyViewController2を呼び出すことによって提示されます。 myViewController2)MyViewController1内

とself.dismisscontroller(someFunctionで自己を)()を呼び出すことによってMyViewController2に却下された。..

問題はデリゲートがnilであることです...デリゲート関数への参照を渡す方法がわかりません。

別のviewcontrollerを呼び出すときに、segue関数の参照はsegue内で設定されます。デリゲート関数の参照を入れるためのセグはありませんか?

誰でも?

答えて

0

MyViewController2のviewDidLoad()では、presentingViewControllerを取得し、それをデリゲートに設定します。

// viewDidLoad - MyViewController2 
if let pvc = self.presentingViewController as? MyViewController1 { 
    self.delegate = pvc 
} 
関連する問題