vic*_*on1 6 presentmodalviewcontroller ios6 uiactivityviewcontroller
我正在开发一个在detailViewController中呈现一些数据的应用程序.我在导航栏中有一个rightBarButton,它提供了一个UIActivityViewController,它充满了我自己的UIActivity子程序项.它们中的大多数工作正常,因为它们只是从详细视图中将一个小方面改变为数据,但我需要其中一个在选择时打开modalViewController.我一直从控制台收到以下警告......
Warning: Attempt to present <UINavigationController: 0x1fd00590>
on <UITabBarController: 0x1fde1070> which is already presenting <MPActivityViewController: 0x1fd2f970>
Run Code Online (Sandbox Code Playgroud)
我想值得注意的是,应用程序不会崩溃,但模态视图也不会出现.我假设UIActivityViewController本身是一个模态视图,你只能一次显示其中一个,所以任务是弄清楚在ActivityView消失后如何执行我的segue,但那就是我难倒的地方.我欢迎任何帮助,想法或反馈.我已经尝试了谷歌,但没有太多运气,我认为因为UIActivityViewController是如此新.
这是我的设置到目前为止,我的UIActivity对象有一个委托设置到detailViewController的自定义协议,让detailViewController执行数据更改,然后更新其视图.
对于有问题的活动,应该提供modalView控制器,我尝试了一些方法,都得到了相同的警告.
这些都不是!!!
1)只是尝试从我的委托方法执行segue
- (void) activityDidRequestTransactionEdit
{
NSLog(@"activityDidRequestTransactionEdit");
[self performSegueWithIdentifier:@"editTransaction" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
2)尝试在UIActivityViewController上设置一个完成块,并让我的委托方法设置一个bool标志,显示模态视图(self.editor)
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {
NSLog(@"completed dialog - activity: %@ - finished flag: %d", activityType, completed);
if (completed && self.editor) {
[self performSegueWithIdentifier:@"editTransaction" sender:self];
}
}];
Run Code Online (Sandbox Code Playgroud)
3)继承UIActivityViewController本身,给它作为委托的detailView,并用我自己的完成块覆盖它的dismissViewControllerAnimated:方法
- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
[super dismissViewControllerAnimated:flag completion:^{
[self.MPActivityDelegate activityDidRequestTransactionEdit];
}];
}
Run Code Online (Sandbox Code Playgroud)
工作解决方案
在UIActivity子类中,您需要像这样重写此方法
- (UIViewController *) activityViewController {
MPEditMyDataViewController *controller = [[MPEditMyDataViewController alloc] init];
controller.activity = self; // more on this property below
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
return navController;
}
Run Code Online (Sandbox Code Playgroud)
在你的MPEditMyDataViewController.h(所选动作应该生成的视图控制器)你需要一个属性回到活动子类,如此
@property (strong, nonatomic) MPEditMyDataActivity *activity;
Run Code Online (Sandbox Code Playgroud)
在你的MPEditMyDataViewController.m中
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancel)];
self.navigationItem.leftBarButtonItem = cancelButton;
}
// here's how you dismiss the view controller when you are done with it
// after saving the changes to your data or whatever the view controller is supposed to do.
-(void) cancel
{
NSLog(@"Cancel Button Pushed");
[self.activity activityDidFinish:YES];
}
@end
Run Code Online (Sandbox Code Playgroud)
做了更多的文档挖掘并找到了 UIActivity 子类化的方法
- (UIViewController *) activityViewController
Run Code Online (Sandbox Code Playgroud)
它让我的视图控制器像我想要的那样弹出,通过从这里返回它而不是试图从我的detailViewController中分离它。现在要弄清楚如何在完成后将其关闭!!!!
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |