SWRevealViewController 在目标 ViewController 上设置委托
SWRevealViewController setting a delegate on the target ViewController
我在使用 SWRevealViewController
识别 destinationViewController
时遇到问题
在某些 ViewController 上,我使用了 prepareForSegue
方法来识别目的地,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showHint"]) {
HintsViewController *hintsVC = [segue destinationViewController];
hintsVC.hintDelegate = self.controller;
hintsVC.hintUsed = self.controller.hintUsed;
hintsVC.firstLetterUsed = self.controller.firstLetterUsed;
hintsVC.answersUsed = self.controller.answersUsed;
}
这些 viewControllers 通过故事板上的 Segues 直接连接。使用这种方法,我可以识别 targetViewcontroller 并将其设置为委托。
但是我的 FirstViewController 中有一个 BarButtonItem,它在 viewDidLoad
方法
中连接到 MenuViewController,如下所示
SWRevealViewController *revealViewController = self.revealViewController;
if(revealViewController){
[self.sideBarButton setTarget:self.revealViewController];
[self.sideBarButton setAction:@selector(rightRevealToggle:)];
revealViewController.rightViewRevealWidth = self.view.frame.size.width * 0.65;
}
这显示了 MenuViewController,它在我想设置为委托的 MenuViewController 上。
所以理想情况下我应该能够做类似的事情:
MenuViewController* menuVC = revealViewController.destinationViewController;
menuVC.delegate = self;
但是我无法使用 viewDidLoad 方法识别 MenuViewControler,而且我不确定如何重构侧边栏按钮以使用命名的故事板 segue。
SWRevealViewController 有一个后视图控制器和一个 frontViewController。
所以你想这样做?
MenuViewController* menuVC = (MenuViewController*)revealViewController.rearViewController;
menuVC.delegate = self;
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.revealViewController().delegate = self
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().rearViewRevealWidth =
}
以下是 swift4 中的委托测试:
func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) { }
func revealControllerPanGestureBegan(_ revealController:SWRevealViewController ){}
func revealController(_ revealController: SWRevealViewController, didMoveTo position: FrontViewPosition) {}
我在使用 SWRevealViewController
destinationViewController
时遇到问题
在某些 ViewController 上,我使用了 prepareForSegue
方法来识别目的地,如下所示:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showHint"]) {
HintsViewController *hintsVC = [segue destinationViewController];
hintsVC.hintDelegate = self.controller;
hintsVC.hintUsed = self.controller.hintUsed;
hintsVC.firstLetterUsed = self.controller.firstLetterUsed;
hintsVC.answersUsed = self.controller.answersUsed;
}
这些 viewControllers 通过故事板上的 Segues 直接连接。使用这种方法,我可以识别 targetViewcontroller 并将其设置为委托。
但是我的 FirstViewController 中有一个 BarButtonItem,它在 viewDidLoad
方法
SWRevealViewController *revealViewController = self.revealViewController;
if(revealViewController){
[self.sideBarButton setTarget:self.revealViewController];
[self.sideBarButton setAction:@selector(rightRevealToggle:)];
revealViewController.rightViewRevealWidth = self.view.frame.size.width * 0.65;
}
这显示了 MenuViewController,它在我想设置为委托的 MenuViewController 上。
所以理想情况下我应该能够做类似的事情:
MenuViewController* menuVC = revealViewController.destinationViewController;
menuVC.delegate = self;
但是我无法使用 viewDidLoad 方法识别 MenuViewControler,而且我不确定如何重构侧边栏按钮以使用命名的故事板 segue。
SWRevealViewController 有一个后视图控制器和一个 frontViewController。 所以你想这样做?
MenuViewController* menuVC = (MenuViewController*)revealViewController.rearViewController;
menuVC.delegate = self;
if self.revealViewController() != nil {
menuButton.target = self.revealViewController()
menuButton.action = #selector(SWRevealViewController.revealToggle(_:))
self.revealViewController().delegate = self
self.view.addGestureRecognizer(self.revealViewController().panGestureRecognizer())
self.revealViewController().rearViewRevealWidth =
}
以下是 swift4 中的委托测试:
func revealController(_ revealController: SWRevealViewController!, willMoveTo position: FrontViewPosition) { }
func revealControllerPanGestureBegan(_ revealController:SWRevealViewController ){}
func revealController(_ revealController: SWRevealViewController, didMoveTo position: FrontViewPosition) {}