Phone, Reminders, and Maps use a different 3D-Touch Peek UI allowing to select an action in one go. For instance, force-press on a reminder and select "Remind me on a day" in one go, without releasing the finger. It also differs visually from standard 3D Touch previews using the UIViewControllerPreviewing
API as it displays a custom icon alongside left-aligned text.
I couldn't find a way to do this using the official API. Did I miss something or is this a private API indeed?
I asked my question on the Apple Developer Forums as well and received this reply from Apple:
Currently there is not public API to do these things. Please file bug reports if this is something you want to do in your app, and include specific details of what you're looking to do.
So it's currently not possible using the official SDK. I filed this enhancement request radar and I encourage you to dupe it if you need this, too!
For future readers, the response from Apple for this question is:
Currently there is not public API to do these things. Please file bug reports if this is something you want to do in your app, and include specific details of what you're looking to do.
Source: Apple Developer Forum
Those are UIPreviewActionItem
.
After overriding previewingContext:viewControllerForLocation:
you can also override - (NSArray<id<UIPreviewActionItem>> *)previewActionItems
and that will allow you to specify your quick actions.
Here's a snippet that will help you out: (related tutorial)
- (NSArray<id<UIPreviewActionItem>> *)previewActionItems
{
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Action 1" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Action 1 triggered");
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Destructive Action" style:UIPreviewActionStyleDestructive handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Destructive Action triggered");
}];
UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Selected Action" style:UIPreviewActionStyleSelected handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
NSLog(@"Selected Action triggered");
}];
return @[action1, action2, action3];
}
Apple Docs:
This property is for use with a preview (peek) view controller which you present in your implementation of the previewingContext:viewControllerForLocation: delegate method..
Implement this method to provide quick actions for such a preview. When the user swipes upward on the preview, the system presents these quick action items in a sheet below the preview.
The default implementation of this method returns an empty array.
来源:https://stackoverflow.com/questions/32841709/how-to-implement-3d-touch-peek-and-select