2016-07-30 2 views

답변

0

1. UIActivity의 하위 클래스를 만듭니다.

이 클래스의 모든 required methods을 구현하고, 활동을 초기화 할 때, 그 시점에서 페이지의 URL을 전달하고 초기화하여 UIViewController, prepareWithActivityItems:SFSafariViewController 컨텍스트 ( rdar://24138390) 내에서 호출되지 않는. 활동에 UI가 표시되지 않는 경우 초기화하는 동안 URL을 저장하는 대신 사용자가 작업을 탭하면 처리 할 수 ​​있습니다.

전체 예 :

@interface YourActivity : UIActivity { 
    UIViewController *activityViewController; 
} 
- (id)initWithURL:(NSURL *)url; 
@end 


@implementation YourActivity 

- (id)initWithURL:(NSURL *)url 
{ 
    self = [super init]; 
    if (self) 
    { 
     [self prepareWithURL:url]; 
    } 
    return self; 
} 

- (NSString *)activityType 
{ 
    return @"YourTypeName"; 
} 

- (NSString *)activityTitle 
{ 
    return @"Perform Action"; 
} 

- (UIImage *)activityImage 
{ 
    return [UIImage imageNamed:@"YourActionIcon"]; 
} 

- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems 
{ 
    return YES; 
} 

- (void)prepareWithActivityItems:(NSArray *)activityItems 
{ 
    NSURL* url = nil; 
    for (NSObject* obj in activityItems) 
    { 
     if ([obj isKindOfClass:[NSURL class]]) 
     { 
      url = (NSURL*)obj; 
     } 
    } 

    [self prepareWithURL:url]; 
} 

- (void) prepareWithURL:(NSURL*)url 
{ 
    // initialize your UI using the given URL 
    activityViewController = ... // initialize your UI here 
} 

- (UIViewController *)activityViewController 
{ 
    return activityViewController; 
} 

+ (UIActivityCategory)activityCategory 
{ 
    return UIActivityCategoryShare; 
} 


@end 

2. UIActivity

SFSafariViewController에이 활동을 초기화하고 사용자가보고있는 페이지의 URL에 전달하여 SFSafariViewControllerDelegate에 다음과 같은 메소드를 구현 추가합니다.

- (NSArray<UIActivity *> *)safariViewController:(SFSafariViewController *)controller 
          activityItemsForURL:(NSURL *)URL 
              title:(NSString *)title 
{ 
    YourActivity* activity = [[YourActivity alloc] initWithURL:URL]; 
    return @[activity]; 
}