gpt4 book ai didi

ios6 - 如何从 UIActivity View Controller 中选取的 UIActivity 项目呈现 ModalViewController?

转载 作者:行者123 更新时间:2023-12-03 01:37:06 27 4
gpt4 key购买 nike

我正在开发一个在detailViewController中显示一些数据的应用程序。我在导航栏中有一个 rightBarButton,它呈现一个 UIActivityViewController,其中填充了我自己的 UIActivity 子类项目。它们中的大多数工作正常,因为它们只是从详细 View 中更改数据的一个小方面,但我需要其中一个在选择时打开 modalViewController 。我不断从控制台收到以下警告......

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

我认为值得注意的是,应用程序不会崩溃,但模态视图也不会出现。我假设 UIActivityViewController 本身是一个模态视图,并且您一次只能显示其中一个 View ,因此任务是弄清楚如何在 ActivityView 消失后执行我的转场,但这就是我所困惑的地方。我欢迎任何帮助、想法或反馈。我尝试过谷歌,但运气不佳,我想是因为 UIActivityViewController 太新了。

这是我到目前为止的设置,我的 UIActivity 对象有一个委托(delegate)设置为DetailViewController 的自定义协议(protocol),该协议(protocol)允许detailViewController 执行数据更改,然后更新其 View 。

对于应该呈现 modalView Controller 的相关事件,我尝试了几种方法,但都得到了相同的警告。

<小时/>

这些都不起作用!!!

<小时/>

1)只是尝试从我的委托(delegate)方法执行segue

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

2)尝试在 UIActivityViewController 上设置完成 block ,并让我的委托(delegate)方法设置一个应该显示模态视图的 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作为委托(delegate),并用我自己的完成 block 覆盖它的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 中(所选操作应生成的 View Controller )您需要像这样返回事件子类的属性

@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

最佳答案

做了更多的文档挖掘并找到了 UIActivity 子类化的方法

- (UIViewController *) activityViewController

它让我的 View Controller 像我想要的那样弹出,通过从这里返回它而不是试图从我的detailViewController中分离它。现在要弄清楚如何在完成后将其关闭!!!!!

关于ios6 - 如何从 UIActivity View Controller 中选取的 UIActivity 项目呈现 ModalViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15369911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com