我怎样才能呈现ModalViewController从UIActivity项目从UIActivity

2019-08-17 12:42发布

我的工作是呈现在detailViewController一些数据的应用程序。 我在导航栏一rightBarButton呈现一个充满我自己UIActivity一个UIActivityViewController sublclassed项目。 他们大多做工精细,因为它们只是改变一个小的方面从细节视图中的数据,但我需要他们的一个选择,当打开一个modalViewController。 我不断收到从控制台以下警告.....

    Warning: Attempt to present <UINavigationController: 0x1fd00590>  
on <UITabBarController: 0x1fde1070> which is already presenting <MPActivityViewController: 0x1fd2f970>

我想这是值得注意的是,应用程序不会崩溃,但模态视图不出现任何。 我假设UIActivityViewController是一个模式的看法本身,你只能一次显示其中的一个这样的任务是要弄清楚如何将ActivityView消失后执行我的SEGUE,但在那里我难倒多数民众赞成。 我欢迎任何帮助,意见或反馈。 我尝试过谷歌,但没有太多的运气,我想是因为UIActivityViewController是太新。

这里是我的设置到目前为止,我UIActivity对象有一个委托设置为detailViewController自定义协议,让detailViewController执行数据的变化,然后更新其视图。

在疑问,应出示modalView控制器的活动我已经尝试了几种方法,所有收到相同的警告。


这些作品都没有!


1)简单地试图执行赛格瑞从我的委托方法

- (void) activityDidRequestTransactionEdit
{
    NSLog(@"activityDidRequestTransactionEdit");
    [self performSegueWithIdentifier:@"editTransaction" sender:self];
}

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];
    }
}];

3)子类UIActivityViewController本身,给它的DetailView作为代表,并重写它的dismissViewControllerAnimated:用我自己完成块的方法

- (void) dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion
{
    [super dismissViewControllerAnimated:flag completion:^{
        [self.MPActivityDelegate activityDidRequestTransactionEdit];

    }];
}

工作方案


在UIActivity子类,你需要重写此方法,像这样

- (UIViewController *) activityViewController {
    MPEditMyDataViewController *controller = [[MPEditMyDataViewController alloc] init];
    controller.activity = self; // more on this property below
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
    return navController;
}

在MPEditMyDataViewController.h(视图控制器所选择的动作应该产生),你需要一个属性回活动子类,像这样

@property (strong, nonatomic) MPEditMyDataActivity *activity;

在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

Answer 1:

做了一些更多的文档挖掘和发现UIActivity继承这个方法

- (UIViewController *) activityViewController

它得到我的视图控制器弹出像我希望通过从这里返回它,而不是试图从我的detailViewController Segue公司吧。 现在要弄清楚如何将其关闭,当我用它做!!!!



文章来源: How can I present a ModalViewController from a UIActivity item picked from UIActivity View Controller?