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) {}