2012-10-07 109 views
8

在iPhone上的照片應用程序中,當您選擇郵件共享選項時,照片會向上滑動的模式視圖控制器動畫。如何修改內置UIActivities的行爲?例如,我希望能夠設置郵件編輯器的主題字段。覆蓋UIActivityViewController的默認行爲

回答

15

不幸的是,定製UIActivityViewController郵件編輯器的主題字段尚未運行。

有關於試圖自定義記錄和報告錯誤此這裏討論:

iphone - How do I set recipients for UIActivityViewController in iOS 6?


如果這樣的工作,根據文檔,你就可以自定義這些郵件撰寫字段:

UIActivityTypeMail: 對象將提供的內容發佈到新的電子郵件。當使用此服務的 時,可以提供指向本地文件的NSString和UIImage對象和NSURL對象作爲活動項目的數據。 您也可以指定其內容使用mailto 方案的NSURL對象。

因此,使用mailto模式,當它工作,你應該能夠定製這樣的領域:

NSString *text = @"My mail text"; 
    NSURL *recipients = [NSURL URLWithString:@"mailto:[email protected]?subject=Here-is-a-Subject"]; 
    NSArray *activityItems = @[text, recipients]; 

    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
    [self presentViewController:activityController animated:YES completion:nil]; 

如果您尋找其他方式來定製UIActivityViewController這裏有一個很好的示例項目:

https://github.com/russj/ios6ShareDemo

+0

謝謝s的鏈接。對於Mail或其他任何不符合您需要的行爲,我相信可以創建一個自定義的UIActivitySource來執行您想要的操作。在這種情況下,排除UIActivityMail,並創建一個自定義活動,填寫主題字段等。 – n13

4

這是我做的,它的工作對我來說在iOS的7

創建符合UIActivityItemSource協議類:

@interface CustomActivityItem : NSObject <UIActivityItemSource> 
@end 

在實施覆蓋相關的方法:

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController 
{ 
    return @""; 
} 

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"Subject" 
    } 

    return nil; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"body"; 
    } 

    return nil; 
} 

然後呈現活動視圖控制器:

CustomActivityItem* activityItem = [[CustomActivityItem alloc] init]; 
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[activityItem] 
                         applicationActivities:nil]; 

[self presentViewController:activityViewController animated:YES completion:nil]; 
+0

這種方法並沒有出現在iOS9上。你會得到一個錯誤'init'已被明確標記爲不可用。 – DenVog

+0

我仍然在iOS 9中使用這種方法,使用Xcode版本7.0.1(7A1001)進行編譯,並且工作正常。你得到了什麼確切的錯誤? – pedrobolanos

+0

這是否添加收件人? – mKane