2015-10-07 4 views
1

Я работаю над реализацией Peek и Pop в своем приложении вместе с UIPreviewActions. У меня есть предварительный просмотр PreviewView, и оба Peek и Pop работают отлично, моя проблема заключается в добавлении к нему UIPreviewActions. Конечно, вы должны поместить метод UIPreviewAction в контроллер предварительного просмотра, так как вы его отпустите, чтобы закрыть это представление и открыть представление в своем родительском контроллере?UIPreviewAction to Mail From Peek

Я имею в 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, но композитор Mail технически должен запускаться из TableView, где все это расположено. Как мне это сделать?

ответ

5

Вы можете достичь этого либо Protocol, либо NSNotification. Вам необходимо вызвать контроллер (контроллер TableView) из метода displayComposerSheet.

Пример с протоколом:

1 - Создание протокола в PreviewController:

@protocol PreviewControllerDelegate <NSObject> 
- (void) sendEmail; 
@end 

2 - Создать недвижимость в PreviewController как:

@property (nonatomic, weak) id<PreviewControllerDelegate> delegate; 

3 - Вызов метода делегата от метода действия:

-(void) displayComposerSheet 
{ 
    [self.delegate sendEmail]; 
} 

4 - Установить PreviewController делегата свойство перед загрузкой в ​​UIViewControllerPreviewingDelegate методе

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location 

5 - Реализовать sendEmail метод в контроллере (TableView Controller), из которого вы можете показать почты композитор.

Смежные вопросы