【问题标题】:SWRevealViewController not able to call from the appdelegate.mSWRevealViewController 无法从 appdelegate.m 调用
【发布时间】:2016-01-13 19:46:54
【问题描述】:

我在 Appdelegate.m 中调用 SWRevealViewController

SWRevealViewController *svc = self.revealViewController;
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    FrontVC *homeVC = [storyboard instantiateViewControllerWithIdentifier:@"FrontVC"];
    [svc setFrontViewController:homeVC animated:NO];
    [svc revealToggleAnimated:YES];

但我无法加载 FrontVC 控制器。 什么是正确的调用方式

【问题讨论】:

  • Appcoda的详细教程不是更方便吗?你可以在情节提要中实现它,只需将开始指针指向 SWRevealViewController 然后你就完成了

标签: ios objective-c iphone swrevealviewcontroller


【解决方案1】:

对于 Swift 2.2

let storyboard = UIStoryboard(name: "Main", bundle: nil)

let sw = storyboard.instantiateViewControllerWithIdentifier("SWRevealViewController") as! SWRevealViewController

self.window?.rootViewController = sw

let cv = storyboard.instantiateViewControllerWithIdentifier("IDOFCONTROLLER") as! NAMEOFCONTROLLER

let navigationController = UINavigationController(rootViewController: cv)

sw.pushFrontViewController(navigationController, animated: true)

【讨论】:

    【解决方案2】:

    我希望这篇文章有所帮助。

    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    
            // this any item in list you want navigate to
            yourHomeViewController *home = (yourHomeViewController *) [storyboard instantiateViewControllerWithIdentifier:@"leid"];
    
            yourSideMenuViewController *slidemenu = (yourSideMenuViewController *)[storyboard instantiateViewControllerWithIdentifier:@"MenuView"];
    
            UINavigationController *nav = [[UINavigationController alloc]initWithRootViewController:home];
    
            UINavigationController *smVC = [[UINavigationController alloc]initWithRootViewController:slidemenu];
    
            // define rear and frontviewcontroller
            SWRevealViewController *revealController = [[SWRevealViewController alloc]initWithRearViewController:smVC frontViewController:nav];
    
            // make it as root
            self.window.rootViewController = revealController;
    

    【讨论】:

    • 这对我来说很完美,唯一的问题是 - 当我导航到子视图控制器时,它为我隐藏了一个后退按钮。
    • 是的,我设法让它为我工作。但是你需要在故事板的 SWRevealViewController 中有一个开始指示器,然后将上面的代码放在 app delegate 上
    • 只需编辑我的答案!...发布您的解决方案..@SiphoKoza
    【解决方案3】:

    我认为你可以将启动指示器放在故事板中的 SWRevealViewController 中,为登录 VC 命名

    //if user is logged in - In login VC 
    [[NSUserDefaults standardUserDefaults] setValue:1 forKey:isLogged];
    
    //In Appdelegate
    if([[NSUserDefaults standardUserDefaults] valueForKey:isLogged] == 1)
        {
            NSLog(@"have data");
    //Start straight into normal SWRevealVC
            self.window.rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController]; 
        }
        else
        {
    
    //If not, make your root VC the login viewcontroller
            UIViewController* rootController = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateViewControllerWithIdentifier:@"LoginViewController"];
    
            self.window.rootViewController = rootController;
        }
    

    【讨论】:

      【解决方案4】:

      我没有使用情节提要,但这样做是这样的:

      SWRevealViewController *revealController = [[SWRevealViewController    alloc] initWithRearViewController:menuViewController frontViewController:frontNavigationController];
      
      SWRevealViewController *viewController = revealController;
      

      【讨论】:

        【解决方案5】:

        你有没有像这样声明和初始化revealViewController?

        @interface AppDelegate ()
            @property (strong, nonatomic) SWRevealViewController *revealViewController;
        @end
        

        /* ... */

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
        {
            self.revealViewController = /* ... init ... */;
            /* ... your code here ... */
        }
        

        【讨论】:

        • 使用属性我的错误消失了,但我的 FrontVC 没有加载。
        【解决方案6】:

        我们不能在 App Delegate 中调用 RevealViewController。 您可以直接将其添加到您的 ViewController 中用于前后。

        【讨论】:

        • 我添加了 .all 在用户登录后工作。我想避免用户进入登录屏幕,所以我想从 didFinishLaunchingWithOptions 方法调用 SWRevealViewController 。去主屏幕。
        • 在 NSUserDefault 中给用户一个 BOOL 值,如果用户还没有注销,则将其放入 Appdelegate 然后检查应用程序何时启动并直接转到所需的 ViewController
        猜你喜欢
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-21
        • 2016-04-19
        • 2018-02-21
        • 2015-11-19
        • 1970-01-01
        相关资源
        最近更新 更多