1

我认为问题的标题可能会产生误导,因为我不太确定如何用一行来表达。我正在尝试实现一个显示控制器(就像在 Facebook 应用程序中看到的那样),并且我正在使用一个甜蜜的预制解决方案SWRevealViewController可以在这里找到。在作者提供的最简单的示例之一(示例/项目 2)中,在 Appdelegate.m 文件中建立了显示控制器内容:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window = window;
    FrontViewController *frontViewController = [[FrontViewController alloc] init];
    RearViewController *rearViewController = [[RearViewController alloc] init];

    UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
    UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];

    SWRevealViewController *mainRevealController = [[SWRevealViewController alloc]
    initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];

    mainRevealController.delegate = self;

    self.viewController = mainRevealController;

    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];
    return YES;
}

viewcontrollerappdelegate.h 文件中由

@property(强,非原子) SWRevealViewController *viewController;

所以这会将显示控制器显示为根视图控制器。对于我的应用程序,我的根视图控制器是不同的,我只是稍后在应用程序中开始使用显示控制器。我的根视图控制器是登录屏幕,然后进行视图是我要实现它的地方。

我想我的问题是:

  • 首先,将登录屏幕作为根视图控制器是否正确?我应该使用某种模式视图来弹出它然后摆脱它吗?
  • 我将如何以及在哪里将以前在委托文件中找到的东西放在哪里?还是它们保留在那里但没有分配给根视图控制器?

我对此一无所知,所以如果它看起来完全微不足道,请原谅我。谢谢!

4

2 回答 2

0

我迟到了,你想要的行为很容易实现,只要把它想象成一个普通的导航堆栈。让我们以您一直遵循的示例 2 为例(您不需要将代码移出委托)。与其将前端视图控制器设置为前端导航控制器的根,不如将登录视图控制器设置为前端导航控制器的根。

这是之前的例子:

FrontViewController *frontViewController = [[FrontViewController alloc] init];
RearViewController *rearViewController = [[RearViewController alloc] init];

UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:frontViewController];
UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];

SWRevealViewController *mainRevealController = [[SWRevealViewController alloc]
        initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];

这是设置登录视图控制器后的示例:

LoginViewController *loginVC =[[LoginViewController alloc]init];//instead of frontViewController
RearViewController *rearViewController = [[RearViewController alloc] init];

UINavigationController *frontNavigationController = [[UINavigationController alloc] initWithRootViewController:loginVC];//instead of frontViewController
UINavigationController *rearNavigationController = [[UINavigationController alloc] initWithRootViewController:rearViewController];

SWRevealViewController *mainRevealController = [[SWRevealViewController alloc]
    initWithRearViewController:rearNavigationController frontViewController:frontNavigationController];

不要忘记LoginViewController使用其 nib 文件创建或您选择命名的任何内容并导入它。在LoginViewController中,您需要实现动作代码以移动到frontviewcontroller

FrontViewController *frontViewController = [[FrontViewController alloc] init];
[self.navigationController pushViewController:frontViewController animated:YES];

等等。

于 2013-12-30T11:22:55.250 回答
0

我最近一直在思考这个问题。事实上,我发现的所有其他第三方实现都有这个设置。

我的建议是将根控制器更改为显示控制器并从那里构建所有内容。您可以为您的原始根、登录名或任何其他控制器禁用显示。我做过一次,并没有预期的那么痛苦。

于 2013-08-23T11:01:23.420 回答