Ios 尝试从另一个类显示视图控制器
我正在开发一个应用程序,允许用户通过Facebook、Twitter和电子邮件进行共享 对于此社交网络,我创建了一个单独的类,其中包含以下代码:Ios 尝试从另一个类显示视图控制器,ios,objective-c,uiviewcontroller,slcomposeviewcontroller,Ios,Objective C,Uiviewcontroller,Slcomposeviewcontroller,我正在开发一个应用程序,允许用户通过Facebook、Twitter和电子邮件进行共享 对于此社交网络,我创建了一个单独的类,其中包含以下代码: -(void)Facebooksharing { SLComposeViewController *facebook = [[SLComposeViewController alloc] init]; facebook = [SLComposeViewController composeViewControllerForServiceT
-(void)Facebooksharing
{
SLComposeViewController *facebook = [[SLComposeViewController alloc] init];
facebook = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[facebook setInitialText:@"Hello"];
[facebook setTitle:@"Helle"];
ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
}
无论何时调用此函数,都会出现以下错误:
Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
任何人都可以帮助我如何从其他类显示此视图?问题是您正在创建一个名为“Main”的新视图控制器,并且该视图控制器未添加到应用程序的windows层次结构中 假设您的FaceBookShare方法是在视图控制器类中实现的。你会打电话的
[self presentViewController:facebook animated:YES completion:nil]
理想情况下,用户当前与之交互的视图控制器应该是您用来调用“presentViewController”的视图控制器
如果尝试在viewDidLoad()方法中显示视图控制器,则可能会再次出现此问题 问题在于您正在创建一个名为“Main”的新视图控制器,并且该视图控制器未添加到应用程序的windows层次结构中 假设您的FaceBookShare方法是在视图控制器类中实现的。你会打电话的
[self presentViewController:facebook animated:YES completion:nil]
理想情况下,用户当前与之交互的视图控制器应该是您用来调用“presentViewController”的视图控制器
如果尝试在viewDidLoad()方法中显示视图控制器,则可能会再次出现此问题 如果您在当前显示给用户的控制器中编写此代码,则不会得到任何错误
presentViewController
假设呈现另一个控制器的控制器在应用程序的UI窗口中已经有一个视图
问题是,
MainRoot
本身实际上从未向用户显示,因此它没有资格通过自身显示任何其他视图控制器如果您在当前显示给用户的控制器中写入此代码,您将不会得到任何错误presentViewController
假设呈现另一个控制器的控制器在应用程序的UI窗口中已经有一个视图
问题在于,MainRoot
实际上从未向用户显示过,因此它没有资格根据您的陈述通过自身显示任何其他视图控制器:
对于这个社交网络,我创建了一个包含此代码的独立类
我们没有此类类型的信息,是UIViewController还是NSObject等
决定您不能从类中向UIViewController
以外的UINavigationController
显示viewcontroller,因为那里无法访问self.navigationController
看看我的答案
我使用decorator设计模式将控件从类(比如UIView、UITableViewCell、NSObject等)转移到从UIViewController继承的类。然后你就可以很容易地打电话了
[self.navigationController presentViewController:facebook animated:YES completion:nil];
在同一链接中,您将找到另一个有助于在窗口上显示viewcontroller的答案。你也可以试试看
关于您实际遇到的问题,如下所示:
ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
此处,MainRoot
controller是一个新分配的viewcontroller,它从未被推送到导航堆栈,因此使用它来推堆栈上的另一个viewcontroller会引发以下错误:
Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
希望有帮助 根据您的陈述:
对于这个社交网络,我创建了一个包含此代码的独立类
我们没有此类类型的信息,是UIViewController还是NSObject等
决定您不能从类中向UIViewController
以外的UINavigationController
显示viewcontroller,因为那里无法访问self.navigationController
看看我的答案
我使用decorator设计模式将控件从类(比如UIView、UITableViewCell、NSObject等)转移到从UIViewController继承的类。然后你就可以很容易地打电话了
[self.navigationController presentViewController:facebook animated:YES completion:nil];
在同一链接中,您将找到另一个有助于在窗口上显示viewcontroller的答案。你也可以试试看
关于您实际遇到的问题,如下所示:
ViewController *MainRoot = [[ViewController alloc] init];
[MainRoot presentViewController:facebook animated:YES completion:nil];
此处,MainRoot
controller是一个新分配的viewcontroller,它从未被推送到导航堆栈,因此使用它来推堆栈上的另一个viewcontroller会引发以下错误:
Warning: Attempt to present <SLComposeViewController: 0x7ffc5afe70e0> on <ViewController: 0x7ffc5af57a60> whose view is not in the window hierarchy!
警告:尝试显示其视图不在窗口层次结构中的对象!
希望有帮助 如果要在MainRoot中显示来自另一个类的视图控制器,则
首先,您必须从self中显示MainRoot视图控制器,此外,您还可以显示您的SLComposeViewController。如果您想在MainRoot中显示另一个类中的视图控制器,那么
首先,您必须从self中演示MainRoot视图控制器,在此基础上,您可以演示您的SLComposeViewController。那么我如何在MainRoot中演示另一个类中的视图控制器那么我如何在MainRoot中演示另一个类中的视图控制器也许您应该尝试以下方法:
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:facebook动画:是完成:无];
也许你应该试试这个:[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:facebook动画:是完成:无];