我有一个视图控制器ViewControllerA。设置视图控制器和非呈现视图控制器之间的委托
我已经设置了一个模式ViewControllerB,它转换到另一个视图控制器ViewControllerC,然后被解散以显示ViewControllerA。
当我不从ViewControllerA推送ViewControllerC时,如何在ViewControllerA和ViewControllerC之间设置委托方法,这样我就不能在ViewControllerA文件中显式设置它的委托?
谢谢。
我有一个视图控制器ViewControllerA。设置视图控制器和非呈现视图控制器之间的委托
我已经设置了一个模式ViewControllerB,它转换到另一个视图控制器ViewControllerC,然后被解散以显示ViewControllerA。
当我不从ViewControllerA推送ViewControllerC时,如何在ViewControllerA和ViewControllerC之间设置委托方法,这样我就不能在ViewControllerA文件中显式设置它的委托?
谢谢。
当某些事情完成时,您可以使用闭包来传递回调。听起来像ViewControllerA应该不知道任何关于ViewControllerC。 ViewControllerA只是打开ViewControllerB,然后需要收到反馈。下面是它的外观:
class ViewControllerA: UIViewController {
let viewControllerB = ViewControllerB()
func showViewControllerB() {
viewControllerB.onFinish = {
// work is done in ViewControllerB and C
}
presentViewController(viewControllerB, animated: true, completion: nil)
}
}
这里的ViewControllerB和ViewControllerC什么样子:
class ViewControllerB: UIViewController {
var onFinish: (() ->())?
let viewControllerC = ViewControllerC()
override func viewDidLoad() {
super.viewDidLoad()
viewControllerC.onFinish = { [weak self] in
self?.onFinish?()
}
}
func showViewControllerC() {
presentViewController(viewControllerC, animated: true, completion: nil)
}
}
class ViewControllerC: UIViewController {
var onFinish:(() ->())?
func didFinishDoSomething() {
onFinish?()
}
}
上面的代码只是表明一个概念,你如何重复封口的视图控制器之间的回调。
如果你使用Objective-C,这个概念是一样的。在这种情况下块用于:
@interface ViewControllerA: UIViewController
@property (strong) ViewControllerB *viewControllerB;
@end
@implementation ViewControllerA
- (void)viewDidLoad {
[super viewDidLoad];
self.viewControllerB.onFinish = ^{
// work is done in both VC B and VC C
};
}
- (void)showViewControllerB {
[self presentViewController:self.viewControllerB animated:YES completion:nil];
}
@end
哪里onFinish
是ViewControllerB @property (copy) void (^onFinish)();
的属性
谢谢你这么多,我会尝试一下!是的,这对我来说是Objective C! – emleeh