gpt4 book ai didi

objective-c - 我如何将 SWRevealViewController 与 unwind segues 一起使用?

转载 作者:搜寻专家 更新时间:2023-10-31 22:47:16 25 4
gpt4 key购买 nike

我有一系列 View 在导航 Controller 上相互叠加。我想用这些 View 做两件事:

  1. 从它们中打开后菜单 View ;
  2. 能够导航使用 Unwind segues 返回堆栈。

我发现,如果我使用常规推送转场将 View Controller 推到彼此之上,那么展开转场会按预期工作,但是每个 View Controller 上的 self.revealViewController 都没有设置并且无法调用菜单使用 revealToggle: 选择器。

如果我将推送 segues 更改为 SWRevealViewControllerSeguePushController 的子类,那么 View 将被推送到彼此之上,并且可以使用 revealToggle 从它们中的任何一个调用菜单。不幸的是,unwind segues 停止工作(我认为这可能是因为 View Controller 是使用 addChild 而不是 SWRevealViewController 类上的 pushViewController 堆叠的)。

有没有办法与 SWRevealViewController 和 Unwind Segues 一起工作?

下面是一个 Storyboard示例:

SWRevealViewController and Unwind segue

第一个 View Controller 是导航 Controller ;第二个是 SWRevealViewController;下面的三个 View Controller 相互导航,第三个 View Controller 与第一个 View Controller 有一个 unwind segue。第一个和第三个 Controller 具有打开菜单的按钮。

正如我之前所说,如果底部 View Controller 之间的转场是常规的推送转场,那么展开转场将按预期工作;第一个 View Controller 的菜单按钮有效(因为它直接连接到 SWRevealViewController),但第三个 View Controller 的菜单按钮不起作用。

将 segue 类型切换为 SWRevealViewControllerSeguePushController 会使第一个和第三个 View Controller 的菜单按钮正常工作,但 unwind segue 停止工作。

哦,我使用“popToRootViewControllerAnimated:”进行了测试,如果将转场设置为 SWRevealViewControllerSeguePushController,它也不起作用。

最佳答案

我在 SWRevealViewControllers github site 上发布了这个问题并收到了非常有帮助的 Patrick Bodet 的答复。我将在下面发布答案,以便它可以帮助与我处于相同情况的人。

我必须更新 Storyboard并添加一个额外的导航 Controller ,如下所示。

enter image description here

如图所示,我希望能够将 View Controller 推到彼此之上,并将 segues 展开到登录屏幕(从菜单)和堆叠 View Controller 。

在我之前的尝试中,SWRevealViewController 似乎无法处理适当的导航转场。 Patrick 的第一个建议是将原始导航 Controller 从 RevealViewController 之前移动到 First View Controller 之前。这确实有效,因为我仍然需要能够从菜单转到登录屏幕,所以我需要一个额外的导航 Controller 。

按照 Patrick 的建议,我添加了一个额外的导航 Controller 。令人尴尬的是,最后我意识到从第三个 View Controller 指向第一个 View Controller 的按钮对第一个 View Controller 有一个 ibaction 和一个 segue,所以这就是为什么它表现得很奇怪! :-(

因此,对于上面显示的 Storyboard,为了工作,您只需为 View Controller 使用常规的 Push segues。无需使用 SWRevealViewControllerSeguePushController segues。

第一和第三 View Controller 的代码是这样的:

#import "ThirdViewController.h"
#import "SWRevealViewController.h"
#import "FirstViewController.h"

@interface ThirdViewController ()
@property (weak, nonatomic) IBOutlet UIBarButtonItem *menuButton;
@end

@implementation ThirdViewController
- (void)viewDidLoad {
[super viewDidLoad];

SWRevealViewController *revealViewController = self.revealViewController;

if (revealViewController) {
[self.menuButton setTarget: revealViewController];
[self.menuButton setAction: @selector( revealToggle: )];
}
}

- (IBAction)returnToFirst:(id)sender {
[self performSegueWithIdentifier:@"First" sender:self];
//[self.navigationController popToRootViewControllerAnimated:YES];
}
@end

关于objective-c - 我如何将 SWRevealViewController 与 unwind segues 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35022296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com