2012-12-31 31 views
2

我使用UIActivityViewController從我的應用程序共享一些文本。我可以發送短信,電子郵件,複製等文本,但我不能發送它打印。UIActivityViewController如何將字符串轉換爲打印

我看到UIActivityTypePrint需要NSData的數據類型。我怎樣才能創建UIActivityViewController把我的字符串作爲一個字符串和NSData,使視圖有可用的打印選項?

NSString *textToShare = self.note.note; 
     NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare, nil]; 
     shareVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
     shareVC.excludedActivityTypes = [[NSArray alloc] initWithObjects:UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo, nil]; 

回答

9

明白了。它不直接使用NSData,它需要UISimpleTextPrintFormatter。

NSString *textToShare = self.note.note; 

UISimpleTextPrintFormatter *printData = [[UISimpleTextPrintFormatter alloc] 
                 initWithText:textToShare]; 
NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare,printData, nil]; 
shareVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
shareVC.excludedActivityTypes = [[NSArray alloc] initWithObjects:UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo, nil];  
+1

我在2013年晚些時候提高了這個效果,因爲它解決了iOS 7中的相同問題。但是,我發現iOS 8不接受UI__PrintFormatter - 它會崩潰。 –

+0

@SilinilinBrian檢查了這一點:http://nshipster.com/uiactivityviewcontroller/ – Nilesh

+0

對我來說iOS8很好。我只是用HTML中的UIMarkupTextPrintFormatter來改進佈局。 – Ian

0

添加在數組中的NSData類型的另一個項目itemsToShare

NSString *textToShare = self.note.note; 
NSData* data = [textToShare dataUsingEncoding:NSUTF8StringEncoding]; 
NSArray *itemsToShare = [[NSArray alloc] initWithObjects:textToShare,data, nil]; 
shareVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
shareVC.excludedActivityTypes = [[NSArray alloc] initWithObjects:UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo, nil]; 

OR

使用字典送項目

NSString *textToShare = self.note.note; 
NSData* data = [textToShare dataUsingEncoding:NSUTF8StringEncoding]; 

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
[dictionary setObject:textToShare forKey:@"shareString"]; 
[dictionary setObject:data forKey:@"shareData"]; 
NSArray *itemsToShare = [[NSArray alloc] initWithObjects:dictionary, nil]; 
[dictionary release]; 
shareVC = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil]; 
shareVC.excludedActivityTypes = [[NSArray alloc] initWithObjects:UIActivityTypeSaveToCameraRoll, UIActivityTypePostToWeibo, nil]; 
+0

感謝,但均未顯示「打印」選項,無論是在模擬器或設備.... – totalitarian

+0

我有一種感覺,打印活動也不會輕易接受一個字符串。我認爲它必須包裹到別的東西? – totalitarian

+0

明白了。它不直接使用NSData,它需要UISimpleTextPrintFormatter。 – totalitarian