ivityViewController在iPad上以模态方式呈现

ivityViewController在iPad上以模态方式呈现

本文介绍了UIActivity activityViewController在iPad上以模态方式呈现,而不是在popover中呈现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在iOS 6中使用客户UIActivity子类时,可以指定从初始UIActionViewController视图中选择操作时将显示的自定义视图控制器。您可以通过从UIActivity子类的 activityViewController 方法返回对自定义视图控制器的引用来执行此操作。

When using a customer UIActivity subclass in iOS 6, it's possible to specify a custom view controller that will be displayed when your action is chosen from the initial UIActionViewController's view. You do this by returning a reference to a custom view controller from your UIActivity subclass's activityViewController method.

根据:

此方法的默认实现返回。使用视图控制器提供附加UI的子类可以重写此方法以返回该视图控制器。如果此方法返回有效对象,系统将为您显示返回的视图控制器,而不是调用 performActivity 方法。在iPad上,您的视图控制器显示在弹出窗口内。在iPhone和iPod touch上,视图控制器以模态显示。

The default implementation of this method returns nil. Subclasses that provide additional UI using a view controller can override this method to return that view controller. If this method returns a valid object, the system presents the returned view controller for you, instead of calling the performActivity method. On iPad, your view controller is presented inside of a popover. On iPhone and iPod touch, your view controller is presented modally.

您的自定义视图控制器应提供自定义UI的视图,并应处理这些视图中的任何用户交互。完成活动后,请勿自行关闭视图控制器。相反,请调用 activityDidFinish:方法,让系统为您解雇。

Your custom view controller should provide a view with your custom UI and should handle any user interactions inside those views. Upon completing the activity, do not dismiss the view controller yourself. Instead, call the activityDidFinish: method and let the system dismiss it for you.



在iPad上,视图控制器显示在弹出框内。在iPhone和iPod touch上,视图控制器以模态显示。

但是,在iPad上,视图控制器由 activityViewController返回总是以模态方式显示,无论我如何呈现UIActivityViewController(无论是模态还是通过弹出框)。当通过弹出窗口呈现时,它会导致崩溃,因为它认为它没有被解雇。

However, on iPad the view controller returned by activityViewController always displays modally, no matter how I present the UIActivityViewController (either modally or via a popover). When presenting via a popover, it causes it to crash since it doesn't think it's been dismissed.

我做错了什么?这是iOS 6中的错误吗?

What am I doing wrong? Is this a bug in iOS 6?

更新:这是一个简单的Xcode项目,用于说明问题。随意克隆它并玩游戏,看看你是否能看到我们出错的地方:

Update: here's a simple Xcode project that illustrates the problem. Feel free to clone it and play around to see if you can see where we're going wrong: github.com/simonwhitaker/GSActivityDemo

推荐答案

正如我们所说的UIActivityViewController,它是向用户显示可用活动的视图。 Apple说明以下内容......

As we are talking about the UIActivityViewController, which is the view showing the available activities to the user. Apple state the following...

我把最后一行作为一个标志,你必须处理如何显示视图,因此我检查代码是否在iPad上运行并相应地使用UIPopover。正如你可以在这里... 在以下方法中。

I took the last line as a sign that you have to handle how the view is presented, so I check whether the code is running on iPad and use a UIPopover accordingly. As you can sere here... https://github.com/bufferapp/buffer-uiactivity/blob/master/BufferUIActivity/Views/FirstViewController.m within the following method.

-(IBAction)openUIActivityView:(id)sender {

    NSString *text = @"Hello world";
    NSString *url = @"http://bufferapp.com";


    NSArray *activityItems = @[text, url];

    BufferUIActivity *bufferActivity = [[BufferUIActivity alloc] init];

    UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:@[ bufferActivity ]];


    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
        [self presentViewController:activityView animated:YES completion:^{

        }];
    } else {
        // Change Rect to position Popover
        self.popup = [[UIPopoverController alloc] initWithContentViewController:activityView];
        [self.popup presentPopoverFromRect:CGRectMake(self.view.frame.size.width/2, self.view.frame.size.width/2, 100, 100) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
    }

}

这篇关于UIActivity activityViewController在iPad上以模态方式呈现,而不是在popover中呈现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 18:30