从另一个班级呈现视图控制器

时间:2014-05-13 23:22:40

标签: ios objective-c uiviewcontroller

我正在尝试从该viewcontroller之外的类中呈现一个新的viewcontroller。

看起来像这样:

AppDelegate.m - >里面有这段代码:

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

现在,在该方法内部是一个利用另一个类的对象:[actionSheet launchActionSheetNav];这只会使动作表显示不同的选项。

现在,ActionSheets.m内部是一些代码,涉及一个segue,如下所示:

handler:^(AHKActionSheet *as){

    ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];
    [vc presentViewController:vc animated:YES completion:nil];
}];

我想做的就是从那里开始一个新的视图控制器,但是[self.navigationController会带来ActionSheets.m不包含这种方法/属性的错误。

如何从原始类外部呈现viewcontroller?

所以层次结构如下:

查看故事板>聆听AppDelegate.m>在其中,调用一个类方法,它将您带到ActionSheets.m - >从那里我需要显示新的viewcontroller。

2 个答案:

答案 0 :(得分:2)

这一行:

ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];

创建ViewControllerYoutube的新实例。这个ViewController不存在于除了那一行之外的任何地方,所以当你跟着它时:

ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];
[vc presentViewController:vc animated:YES completion:nil];

您试图呈现尚未呈现的视图控制器。

如果您想从外部课堂演讲,您需要某种方式来保持对您想要呈现的视图控制器的引用,可能在您的ActionSheet.h

@property (weak, nonatomic) ViewControllerYoutube *myViewControllerYoutube;

然后在创建操作表时指定它(假设您在ViewControllerYoutube中创建它)

ActionSheet * myActionSheet = [[ActionSheet alloc]init];
myActionSheet.myViewControllerYoutube = self;

然后代替:

ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];
[vc presentViewController:vc animated:YES completion:nil];

请致电:

[_myViewControllerYoutube presentViewController:vc animated:YES completion:nil];

更新

根据我们的聊天情况,我认为我们可以解决这个问题。

  1. ActionSheet.h

    @property (weak, nonatomic) UIViewController *presentingViewController;
    
  2. 在' ActionSheet.m'

    ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];
    [_presentingViewController presentViewController:vc animated:YES completion:nil];
    
  3. 在AppDelegate中:

    ActionSheet * actionSheet = [[ActionSheet alloc]init];
    UITabBarController * tabController = (UITabBarController *)self.window.rootViewController;
    actionSheet.presentingViewController = tabController.selectedViewController;
    

答案 1 :(得分:0)

你需要做的     [currentViewController presentViewController:vc animated:YES completion:nil];

你有没有提及" correntViewController"从这个街区?从这堂课? 如果没有,请执行此操作

添加一个属性      @property(nonatomic,strong) UIViewController *currentViewController

在给定的课程中

然后在您的init方法中,或在通常的setCurrentViewController:

将引用传递给控制器​​, 并改变你[vc presentViewController:vc animated:YES completion:nil]; 至      [self.currentViewController presentViewController:vc animated:YES completion:nil];