从 Peek 发送邮件的 UIPreviewAction
UIPreviewAction to Mail From Peek
我正在努力在我的应用程序中实现 Peek 和 Pop,以及 UIPreviewActions。我的 PreviewView 都设置好了,Peek 和 Pop 都很好用,我的问题是向其中添加 UIPreviewActions。当然,您必须将 UIPreviewAction 方法放在预览控制器中,那么您如何让它关闭该视图,并在其父控制器中打开该视图?
我在 PreviewController 中有:
- (NSArray*)previewActionItems {
// setup a list of preview actions
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Post to Facebook" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Message" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Email" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
[self displayComposerSheet];
}];
// add them to an arrary
NSArray *actions = @[action1, action2, action3];
// and return them
return actions;
}
displayComposerSheet 只是一种用于撰写电子邮件的标准方法,其中包括用于显示它的自 presentViewController 方法。但是,所有这些方法都在 PreviewController 中,但从技术上讲,邮件编辑器需要从所有这些方法所在的 TableView 启动。我应该怎么做?
您可以通过 Protocol
或 NSNotification
来实现。您需要从 displayComposerSheet
方法调用控制器(TableView 控制器)方法。
协议示例:
1 - 在 PreviewController 中创建协议:
@protocol PreviewControllerDelegate <NSObject>
- (void) sendEmail;
@end
2 - 在 PreviewController 中创建 属性 为:
@property (nonatomic, weak) id<PreviewControllerDelegate> delegate;
3 - 从操作方法调用委托方法:
-(void) displayComposerSheet
{
[self.delegate sendEmail];
}
4 - 在 UIViewControllerPreviewingDelegate
方法
中加载之前设置 PreviewController 委托 属性
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
5 - 在控制器(TableView 控制器)中实现 sendEmail
方法,您可以从中显示邮件编辑器。
我正在努力在我的应用程序中实现 Peek 和 Pop,以及 UIPreviewActions。我的 PreviewView 都设置好了,Peek 和 Pop 都很好用,我的问题是向其中添加 UIPreviewActions。当然,您必须将 UIPreviewAction 方法放在预览控制器中,那么您如何让它关闭该视图,并在其父控制器中打开该视图?
我在 PreviewController 中有:
- (NSArray*)previewActionItems {
// setup a list of preview actions
UIPreviewAction *action1 = [UIPreviewAction actionWithTitle:@"Post to Facebook" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action2 = [UIPreviewAction actionWithTitle:@"Message" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
}];
UIPreviewAction *action3 = [UIPreviewAction actionWithTitle:@"Email" style:UIPreviewActionStyleDefault handler:^(UIPreviewAction * _Nonnull action, UIViewController * _Nonnull previewViewController) {
[self displayComposerSheet];
}];
// add them to an arrary
NSArray *actions = @[action1, action2, action3];
// and return them
return actions;
}
displayComposerSheet 只是一种用于撰写电子邮件的标准方法,其中包括用于显示它的自 presentViewController 方法。但是,所有这些方法都在 PreviewController 中,但从技术上讲,邮件编辑器需要从所有这些方法所在的 TableView 启动。我应该怎么做?
您可以通过 Protocol
或 NSNotification
来实现。您需要从 displayComposerSheet
方法调用控制器(TableView 控制器)方法。
协议示例:
1 - 在 PreviewController 中创建协议:
@protocol PreviewControllerDelegate <NSObject>
- (void) sendEmail;
@end
2 - 在 PreviewController 中创建 属性 为:
@property (nonatomic, weak) id<PreviewControllerDelegate> delegate;
3 - 从操作方法调用委托方法:
-(void) displayComposerSheet
{
[self.delegate sendEmail];
}
4 - 在 UIViewControllerPreviewingDelegate
方法
- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location
5 - 在控制器(TableView 控制器)中实现 sendEmail
方法,您可以从中显示邮件编辑器。