2014-09-11 2 views
4

사용자 지정 UIActivity이 제목을 지원하도록 지정하려면 어떻게합니까?사용자 지정 UIActivity에 대한 제목

UIActivityItemSource 프로토콜에 대한 문서는 주제를 제공하기 위해 당신에게 소스를하려는 경우, 옵션 activityViewController:subjectForActivityType: 선택을 구현할 수 있음을 언급

:

때 서비스는 별도의 주제 필드에 제공 할 수있는 항목을 게시하고 데이터 필드 (예 : 이메일 메시지). 지원하는 서비스에 제목 필드를 제공하려는 경우이 메서드를 구현하십시오.

그러나 내가 알 수있는 한, 내 사용자 지정 UIActivity가 대상을 지원한다는 것을 실제로 지정할 수있는 방법은 어디에도 기록되어 있지 않습니다. 어떻게 이뤄지나요?

편집 : 내 질문에 명확하게하기 위해

, 나는 사용자 지정 작업 항목 소스를 가정하자 UIActivityItemSource 프로토콜을 구현 DocumentActivityItemSource 말, 그리고 나는 우리가 SendWithFooMessageActivity를 호출 할 수있는 사용자 정의 UIActivity을 보유하고 있습니다.

나는 다음 UIActivtyViewController를 시작

NSArray *activityItems = @[[[DocumentActivityItemSource alloc] initWithDocument: document]]; 
NSArray *applicationActivities = @[[[SendWithFooMessageActivity alloc] init]]; 
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems 
                        applicationActivities:applicationActivities]; 
[parentViewController presentViewController:activityViewController 
            animated:YES 
           completion:nil]; 

지금, 팝업에서 나는 SendWithFooMessageActivity을 선택합니다. 액티비티 컨트롤러는 DocumentActivityItemSource 인스턴스에서 activityViewController:itemForActivityType:을 호출하여 항목을 가져오고 해당 개체를 prepareWithActivityItems: 메서드로 호출하여 SendWithFooMessageActivity으로 전달합니다.

정상적으로 활동 항목은 이미지, 문자열 또는 URL이됩니다. 이 경우 DocumentActivityItemSource이 문서에 대한 설명이 포함 된 문자열을 반환한다고 가정 해 보겠습니다. 그러면 SendWithFooMessageActivity은이 텍스트를 foo-mail 메시지의 본문 텍스트로 사용할 수 있습니다.

그러나 Foo 메시지도 제목이 유효해야합니다. 흥미롭게도 UIActivityItemSource 프로토콜에는 선택 항목 인 activityViewController:subjectForActivityType:이 포함되어 있습니다. 실제로이 옵션을 지원하는 서비스를 제공하기 위해 문서화되어 있습니다.

Apple이 제공 한 전자 메일 활동의 경우 실제로는 activityViewController:subjectForActivityType:DocumentActivityItemSource에서 호출되며 그 결과가 전자 메일 제목으로 사용됩니다.

그러나 내 맞춤형 SendWithFooMessageActivity도 activityitem에서 주제를 가져오고 싶다고 지정하는 방법이없는 것 같습니까? 문서에서는 "[주제]를 지원하는 서비스"에 대해 이러한 일이 발생한다고 언급합니다. 그렇다면 실제로 내 서비스가 실제로 지원하는 서비스를 지정하는 방법은 무엇입니까?

또한 "activityViewController:thumbnailImageForActivityType:suggestedSize:"은 "하나를 지원하는 서비스"에 미리보기 이미지를 제공한다고 가정합니다. 이것은 기본 ShareOnTwitter 및 ShareOnFacebook 활동에서 작동하지만 맞춤 활동을 지원하는 방법은없는 것 같습니다. 이것이 가능한가?내가 단락에 activityViewController입니다 또한 아래에 제공 @chriszumberge 해결 ​​방법을 사용하고 직접이 itemsource에서 필요한 정보와 사용자 활동 초기화 한 지금까지

:

[SendWithFooMessageActivity alloc] initWithSubject: document.title]; 

을하지만, 이것은 전체 UIActivityViewController 설정을 사용하는 것으로 보이지 않습니다.

답변

0

나는 자동화 된 방법이 있다고 생각하지 않습니다.

대신 소스 항목에서 수동으로 프로토콜 메소드를 호출하여 주제를 가져옵니다. activityViewController 코드 또는 -(void)performActivity 메소드에서 수행 할 수 있습니다. 처음 구현 않다면

안전을 위해, 당신은 확인할 수 있습니다

NSString *subject = nil; 
if ([item respondsToSelector:@selector(activityViewController:subjectForActivityType:)] 
{ 
    subject = [item activityViewController:activityViewController subjectForActivityType:activityType]; 
} 
+1

프로토콜을 어떻게 구현합니까? UIActivity는 일반적으로 원시 UIActivityItemSource에 액세스 할 수 있다고 생각하지 않습니다.내가 아는 한, UIActivityItemSource는 activityViewController : itemForActivityType :에서 항목을 반환해야하며 해당 항목은 공유 할 항목에 따라 NSString, UIImage, UIImage 또는 다른 항목이어야합니다. UIActivityItemSource를 항목으로 반환 할 수 있습니까? 메일, 트위터, 페이스 북을 위해 애플이 제공하는 기본 액티비티를 작동시킬 수 있습니까? – AHM

1

내가 추천 :

UIActivityViewController *activityVC = [[UIActivityViewController alloc] 
    initWithActivityItems:@[@"Info you're emailing out."] applicationActivities:nil]; 
[activityVC setValue:@"Custom Email Subject Here" forKey:@"subject"]; 

을하지만, 사용자 정의 UIActivity를 사용하여 이메일을 사용하는 것으로 표시하고 있기 때문에, 이메일을 보내려면 MFMailComposeViewController을 사용하고 있다고 가정합니다.

그런 경우 사용자 정의 UIActivityItemProvider에 속성을 만들고 제목 문자열을 입력 한 다음 사용자 정의 UIActivity을 초기화하고 UIActivityViewController으로 전달하는 방법을 설정하십시오. 공급자에서 당신은 사전을 만들 수 있습니다 그리고 당신은

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType

방법으로 원하는 키 값에 대한 주제 문자열을 설정합니다.

거기에서 사용자 정의 UIActivity에있는 주제는 - (UIViewController*) activityViewController 방법으로 사전의 속성으로 저장할 수 있으며 같은 방법으로 아래 코드를 사용하여 이메일을 초기화하고 제목을 설정합니다.

MFMailComposeViewController *mailCVC = [[MFMailComposeViewController alloc] init]; 
mailCVC.mailComposeDelegate = self; 
[mailCVC setSubject:theSubject]; 
[mailCVC setMessageBody:theMessage isHTML:NO]; 
[mailCVC addAttachmentData:theData mimeType:@"text/csv" fileName:theFileName]; 

EDIT

UIActivityItemProvder 프로토콜에 작용 데이터 항목을 검색 할 UIActivityViewController 객체가 사용되는 방법을 정의한다 (직선 사과 문서에서). activityViewController:subjectForActivityType: 메서드는 UIActivityItemSource 프로토콜의 일부입니다.

고객 맞춤 UIActivityItemProvider은 기본적으로 UIActivityItemSource 프로토콜을 준수합니다. 그것이 바로 subjectForActivityType: 메소드를 구현해야하는 곳입니다.

그런 다음 결정하는 switch/case 문 또는 if 문 무리를 사용할 수 있습니다 사용자 정의 UIActivity의 activityTitle 방법에 정의 된 들어오는 [activityType isEqualToString:@"Custom UIActivity Title"] 여부. 그렇다면 제목 문자열이 무엇이든지 반환하십시오. 그러나 사용자 정의 UIActivityItemProvider 하위 클래스에 있어야합니다.

+0

이것은 내가 한 일이기도하지만, 프로토콜이 겉으로보기에는 주제와 축소판에 대한 지원을 포함하고 있기 때문에 괴상한 것처럼 보입니다. 나는 커스텀 UIActivity가 이것을 얻을 수 없다는 이유 때문에 혼란 스럽다. 애플의 결함이나 감독처럼 보인다. – AHM

+0

@ AHM- 귀하의 성명을 오해 할 수도 있습니다 만, 커스텀 UIActivity가 [UIActivityItemSource protocol] (https)를 따르지 않는 한, customAIActivity가'activityViewController : subjectForActivityType :'selector **를 사용할 수 없습니다. : //developer.apple.com/library/ios/documentation/uikit/reference/UIActivityItemSource_protocol/index.html). – chriszumberge

+0

아마도 내가 뭔가를 오해하고 있습니다. 'UIActivity'가'UIActivityItemSource'를 구현합니까? 내가 이해하는 한, 커스텀 UIActivities는 기본 'UIActivity'를 상속해야하며, 액티비티 아이템은'UIActivityItemSource' 프로토콜을 구현해야합니다. 그런 다음 UIActivityViewController에 항목과 사용자 지정 활동을 모두 등록하면 사용자에게 활동을 선택하고 제공된 항목으로 선택한 항목을 구성하도록 요청합니다. 내가 원하는 것은 내 사용자 정의 UIActivity가 주체로 구성되기를 원하는지 지정하는 것이다. – AHM

관련 문제