Ios 协议不呼叫
我已经创建了一个协议MainMenuDelegate。但它不是在召唤 在我的主菜单中Ios 协议不呼叫,ios,swift2,Ios,Swift2,我已经创建了一个协议MainMenuDelegate。但它不是在召唤 在我的主菜单中 import UIKit @objc protocol MainMenuDelegate { optional func toggleLeftPanel() } class MainMenu: UIViewController { var delegate: DashBoard! override func viewDidL
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()
}
}
仪表板中
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")
}
}
问题在于连接和使用视图控制器的方式。我确信您在调用委托方法时没有使用正确的对象 我在操场上创建了一个示例,可以设法调用委托方法。这里的关键行是显示对象用法的最后4行。我没有创建新的主菜单对象,也没有使用在仪表板中创建的主菜单对象。为了情节提要,我用自己的方法替换了视图控制器方法
@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()
在viewDidLoad中,您正在创建MainMenu的新实例,而不是使用现有的one@MidhunMP我们如何克服这个问题…您需要指定什么是主菜单,什么是仪表板?两者之间的关系如何,以便我们可以帮助您Main菜单是我的另一个控制器,dashBoard是另一个控制器。我想点击主菜单上的按钮,控制面板的调用方法。这是我们想要制作抽屉的演示。你导入了仪表板主菜单标题的相关委托吗?这不是与一个视图控制器如何呈现另一个视图控制器有关吗,在演示过程中,演示视图控制器如何在演示视图控制器上设置属性?这里有一条很细的线,但在某种程度上是肯定的。这完全取决于如何通过协议连接两个视图控制器。双方在订立合同和执行合同时应保持一致!我不明白你的最后一句话。我的意思是当涉及到协议时,你必须使用正确的对象。我认为OP创建了一个初始化的主菜单对象,当试图调用委托时,调用不同的主菜单对象。是的,这正是问题所在。但是,我假设OP实际上不知道第一个视图控制器如何创建和显示第二个视图控制器。你的回答对他没有帮助,因为他根本不理解这种关系。