我正在尝试从该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。
答案 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];
根据我们的聊天情况,我认为我们可以解决这个问题。
在ActionSheet.h
:
@property (weak, nonatomic) UIViewController *presentingViewController;
在' ActionSheet.m'
ViewControllerYoutube *vc = [[ViewControllerYoutube alloc]init];
[_presentingViewController presentViewController:vc animated:YES completion:nil];
在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];