我创建了一个协议MainMenuDelegate
。但它没有打电话。
在我的MainMenu
import UIKit
@objc
protocol MainMenuDelegate {
optional func toggleLeftPanel()
}
class MainMenu: UIViewController {
var delegate: DashBoard!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func selectAction(sender:UIButton) {
delegate?.toggleLeftPanel()
}
}
在DashBoard中
import UIKit
@objc
protocol DashBoardDelegate {
}
class DashBoard: UIViewController {
var delegate: MainMenu?
var a : MainMenu!
override func viewDidLoad() {
self.a = MainMenu()
self.a.delegate = self
}
}
extension DashBoard : MainMenuDelegate
{
func toggleLeftPanel()
{
print("afgygfy")
}
}
答案 0 :(得分:0)
Issue is in the way your are connecting and using your view controllers. I am sure you are not using the right object when calling delegate method.
I created a sample in playground and could manage to call the delegate method. The key lines here are last 4 lines which shows the usage of object. I am not creating a new MainMenu
object and using the one which was created in the Dashboard
. For storyboard sake I replaced view controller methods with my own methods.
@objc
protocol DashBoardDelegate {
}
class DashBoard: UIViewController {
var delegate: MainMenu?
var a : MainMenu!
func dash() {
self.a = MainMenu()
self.a.delegate = self
}
}
extension DashBoard : MainMenuDelegate
{
func toggleLeftPanel()
{
print("afgygfy")
}
}
@objc
protocol MainMenuDelegate {
optional func toggleLeftPanel()
}
class MainMenu: UIViewController {
var delegate: DashBoard!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func takeAction() {
print(delegate)
delegate?.toggleLeftPanel()
}
}
var dash = DashBoard()
dash.dash()
var main = dash.a
main.takeAction()