我正在尝试对标准活动(打印、邮件、FaceBook 等)实施自定义活动,但现在只需要标准打印(用于 AirPrint)和我自己通过直接方法进行的自定义打印。我显然缺少一些基本的东西,因为我的自定义类中的任何方法都没有被调用过。现在我只有一些 NSLog 语句来确定调用顺序,并让框架运行。
以下是我对自定义活动类的测试代码:
// PrintActivity.h
#import <UIKit/UIKit.h>
@interface PrintActivity : UIActivity
@end
还有他们
#import "PrintActivity.h"
@interface PrintActivity ()
@property (nonatomic, strong) UIWebView *dummyWebView;
@end
@implementation PrintActivity
- (NSString *)activityType {
NSLog(@"activityType");
return @"MetriScan Print";
}
- (NSString *)activityTitle {
NSLog(@"activityTitle");
return @"MetriScan\nPrint";
}
- (UIImage *)activityImage {
NSLog(@"activityImage");
UIImage *icon = [UIImage imageNamed:@"metriscan_57_c2a_3.png"];
return icon;
}
- (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
NSLog(@"canPerformWithActivityItems");
return YES;
}
- (void)prepareWithActivityItems:(NSArray *)activityItems {
NSLog(@"prepareWithActivityItems");
}
- (void)performActivity {
NSLog(@"Do the actual printing here");
// My custom code here
}
这是主程序中的调用:
- (IBAction)printReport:(UIBarButtonItem *)sender {
NSLog(@"Print Report");
PrintActivity *metriscanPrint = [[PrintActivity alloc] init];
UIViewPrintFormatter *printFormatter = [self.webView viewPrintFormatter];
NSArray *activityItems = [NSArray arrayWithObjects:printFormatter, nil];
NSArray *appActivities = [NSArray arrayWithObjects:metriscanPrint, nil];
UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:appActivities];
//activityController.excludedActivityTypes = [NSArray arrayWithObjects:UIActivityTypePostToFacebook, UIActivityTypePostToTwitter, UIActivityTypePostToWeibo, UIActivityTypeMail, UIActivityTypeMessage, nil];
activityController.completionHandler = ^(NSString *activityType, BOOL completed) {
sender.enabled = YES;
};
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
[self presentViewController:activityController animated:YES completion:nil];
} else {
sender.enabled = NO;
self.printPop = [[UIPopoverController alloc] initWithContentViewController:activityController];
[self.printPop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
}
正如我所说,没有调用自定义类中的任何方法,但系统邮件、消息和复制图标显示在活动表中,而不是打印图标。我只希望系统打印图标(和我自己的)。
如果我取消注释顶部的语句块(并注释掉 NSArray *activityItems ......),则系统邮件、消息、打印和复制图标。在这个实验中,我认为我通过创建自己的格式化程序来混合不同的方法,但这似乎是 WWDC 2012 的建议?
如果我随后取消注释带有“excludeActivityTypes”的行,我只会得到系统打印图标。
我欢迎任何意见来帮助我解决这个问题。
如果有人知道任何示例代码来做我想做的事,那就太好了。
编辑:将代码更新为我的工作代码。