我是swift和iOS开发的新手 . 我对协议和委托方法有疑问 .
我有一个4伏特的说vc1,vc2,vc3,vc4 . 我正在从vc1-> vc2-> vc3-vc4-> vc1导航 . 那是从vc4,我使用导航控制器弹回到vc1 .
我有一个协议和方法就像
protocol myProtocol{
func myFunc()
}
在vc4中,我作为代表,
var delegate:myProtocol?
并且我在按钮动作中使用它作为
if let delegate = self.delegate{
delegate.myFunc()
}
并且还将vc4弹回vc1 .
现在在VC1中,我将myProtocol扩展为
class vc1:myProtocol{
override func viewDidLoad()
{
let vcProtocol = vc4()
vc4.delegate = self
}
func myFunc()
{
print("executing this")
}
}
但它不起作用 . 我可以这样做吗?如何使用委托和协议将这些连接到类 . 请帮助我
3 回答
如果控制器没有被销毁,viewDidLoad只执行一次 .
例如,尝试在viewWillAppear中调用 .
此外,您无需更改vc4的委托,只需将委托再次设置为vc1(在viewWillAppear中) .
你试过通知吗?在您的VC1 ViewController ViewDidLoad方法中:
在需要myFunc的VC4中:
您可以从导航堆栈中获取与第一个viewController具有相同类型的viewController,然后将其指定为vc4中的委托对象 .
例如:在vc4的viewDidLoad中,您可以这样做
我假设你的vc1,vc2,vc3等有自己的ViewController自定义类 .
另一种实现方法是从self.navigationController?.viewControllers数组中获取第一个控制器,并将其设置为vc4中的委托对象 .
要么,