如何在共享扩展视图控制器中获取标题?

时间:2015-09-30 13:02:40

标签: ios iphone ios8-share-extension

-(void)viewDidLoad {

    [super viewDidLoad];

    NSExtensionItem *item = self.extensionContext.inputItems[0];
    NSItemProvider *itemProvider = item.attachments[0];
     NSLog(@"%@",itemProvider);

    if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePlainText])
    {    
        [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePlainText options:nil completionHandler:^(NSString *item, NSError *error)
        {       
            if (item)
            {
                textString=item;    
            }
        }];
    }

我在我的应用中使用共享扩展程序。我使用它作为UIViewController的子类而不是SLcomposer。在viewDidLoad中我试图从NSItemProvider访问页面中的文本,但它只有一个键是公共URL,任何人都可以给我一个想法如何在kUTTypePlainText中实现NSItemProvider。我还设置了NSExtensionActivationSupportsText,其类型为Boolean,值为YES

2 个答案:

答案 0 :(得分:4)

您可以使用ExtensionPreprocessingJS执行此操作。

首先,将NSExtensionJavaScriptPreprocessingFile密钥添加到Info.plist中的NSExtensionAttributes字典中。该值应该是没有扩展名的JavaScript文件的名称,即MyExtensionJavaScriptClass

然后,在Info.plist中的NSExtensionActivationRule字典中,将NSExtensionActivationSupportsWebPageWithMaxCount键设置为值1(类型为Number)。

接下来,使用以下代码将MyExtensionJavaScriptClass.js添加到您的扩展程序:

var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
    run: function(arguments) {
       arguments.completionFunction({"title": document.title});
    } 
};

// The JavaScript file must contain a global object named "ExtensionPreprocessingJS".
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;

然后在ShareViewController viewDidLoadimport MobileCoreServices

中包含以下函数
    let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
    let itemProvider = extensionItem.attachments?.first as! NSItemProvider

    let propertyList = String(kUTTypePropertyList)
    if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
        itemProvider.loadItemForTypeIdentifier(propertyList, options: nil, completionHandler: { (item, error) -> Void in
            let dictionary = item as! NSDictionary
            NSOperationQueue.mainQueue().addOperationWithBlock {
                let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
                let title = results["title"] as! String                                        
                //yay, you got the title now
            }
        })
    } else {
        print("error")
    }

答案 1 :(得分:0)

我猜您已经使用提供的网址请求网站,解析内容并从该字符串中获取标题。

BTW:Apple文档说:

  

如果您的共享或iOS操作扩展程序需要访问网页,则必须包含非零值的NSExtensionActivationSupportsWebPageWithMaxCount键

请参阅" Accessing a Webpage"

部分