【问题标题】:How to get instance of ECSlidingViewController in another storyboard?如何在另一个故事板中获取 ECSlidingViewController 的实例?
【发布时间】:2016-03-14 16:14:15
【问题描述】:

小背景 :- 我的项目中有两个故事板(一个带有自动布局,一个没有自动布局)。 'Main' 故事板包含ECSlidingViewController,我在topviewcontroller 中设置ECSliding github 页面,如下所示:-

我的代码:-

 -(void)GoToNewStoryBoard
{
    UIStoryboard *storyboardWithAutolayout = [UIStoryboard storyboardWithName:@"AutolayoutBoard" bundle:nil];

    self.slidingViewController.topViewController = [storyboardWithAutolayout instantiateViewControllerWithIdentifier:@"ViewControllerinNewStoryBoard"];
}

-(void)someMethodInNewViewController
{
    ECSlidingViewController *sliding_viewController = (ECSlidingViewController*)[self.navigationController visibleViewController];
    if([sliding_viewController isKindOfClass:[ECSlidingViewController class]])
    {
        MenuViewController *menu = (MenuViewController *)sliding_viewController.underLeftViewController;
        NSString *windowType = [[NSUserDefaults standardUserDefaults] valueForKeyPath:@"menuWindowType"];
        if([windowType isEqualToString:@"Push_PaymentPage"])
        {
            [menu pushToViewController];
        }
    }
}



-(void)pushToViewControllerInNewStoryBoard
{
    self.slidingViewController.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"NewVCNav"];

    [self.slidingViewController resetTopViewAnimated:YES];    
}

问题:-

如何在新故事板的视图控制器类中获取ECSlidingViewController 的实例,因为[self.navigationController visibleViewController] 给了我UIViewController 类的实例而不是ECSlidingViewController

【问题讨论】:

  • 您可以从appDelegate 访问该参考资料。
  • @NimitParekh 我该怎么做?
  • 所有代码都在上面有问题

标签: ios objective-c iphone uistoryboard ecslidingviewcontroller


【解决方案1】:

您需要将对象创建到AppDelegate.m 文件中。

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

     UIStoryboard *storyboardWithAutolayout = [UIStoryboard storyboardWithName:@"AutolayoutBoard" bundle:nil];
     self.slidingViewController = = (ECSlidingViewController*)[mainStoryboard
                                                 instantiateViewControllerWithIdentifier: @"ECSlidingVctrID"];
     self.slidingViewController.topViewController = [storyboardWithAutolayout instantiateViewControllerWithIdentifier:@"ViewControllerinNewStoryBoard"];
 return YES;
}

AppDelegate.m 文件中再创建一个方法。

-(void)changeViewControllerIntoSlider:(UIViewController*)vc{
     self.slidingViewController.topViewController = [storyboardWithAutolayout instantiateViewControllerWithIdentifier:@"ViewControllerinNewStoryBoard"];
}

现在你可以访问ECSlidingViewController的那些方法和对象了。

将 AppDelegate 文件导入您的控制器。

#import "AppDelegate.h"

然后访问 appDelegate 对象。 AppDelegate appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];

[appDel slidingViewController]//Now you got the reference of slider you can do any thing.

然后访问appDelegate方法。

AppDelegate appDel = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[appDel changeViewControllerIntoSlider:"Your view controller according storyboard"]

【讨论】:

  • 感谢 Nimit 这种方法似乎很好。但是我在类 MenuViewController 中管理重定向逻辑,该类也在 LeftViewController
  • @AshishPisey 需要示例项目,因此获得更多想法
【解决方案2】:

我使用self.slidingViewController.underLeftViewController 代替[self.navigationController visibleViewController] 如下:-

-(void)someMethodInNewViewController
{ 
    MenuViewController *menu = (MenuViewController*) self.slidingViewController.underLeftViewController;

    [menu pushToAcceptedMember];
}

这给了我ECSlidingViewController 实例。

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 2017-02-22
    • 2013-09-17
    • 2014-11-13
    • 1970-01-01
    • 2017-01-04
    • 2013-02-03
    • 2013-07-31
    • 2012-12-03
    相关资源
    最近更新 更多