UIActivity activityViewController being presented modally on iPad instead of in popover

前端 未结 4 1160
误落风尘
误落风尘 2020-12-31 09:03

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 UIA

4条回答
  •  鱼传尺愫
    2020-12-31 09:58

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

    Your app is responsible for configuring, presenting, and dismissing this view controller. Configuration for the view controller involves specifying the data objects on which the view controller should act. (You can also specify the list of custom services your app supports.) When presenting the view controller, you must do so using the appropriate means for the current device. On iPad, you must present the view controller in a popover. On iPhone and iPod touch, you must present it modally.

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

提交回复
热议问题