我有一個視圖控制器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