Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何与我的应用程序共享所选文本?_Ios_Objective C_Mobile_Share - Fatal编程技术网

Ios 如何与我的应用程序共享所选文本?

Ios 如何与我的应用程序共享所选文本?,ios,objective-c,mobile,share,Ios,Objective C,Mobile,Share,我想让我的应用程序出现在UIActivityViewController中进行文本共享,如邮件、iMessage、Notes、Gmail等 例如,当用户点击所选文本并从附件中的任何应用程序点击“共享”按钮时: 我希望我的应用程序出现在UIActivityViewController中,当用户选择我的应用程序时,启动它并能够处理所选文本 所以我试过: 在苹果文档中搜索 搜索相关的UTI,但我知道UTI仅用于文件,而不用于简单的NSString(如果我错了,请纠正我) 我已经尝试过实现共享扩展,

我想让我的应用程序出现在UIActivityViewController中进行文本共享,如邮件、iMessage、Notes、Gmail等

例如,当用户点击所选文本并从附件中的任何应用程序点击“共享”按钮时:

我希望我的应用程序出现在UIActivityViewController中,当用户选择我的应用程序时,启动它并能够处理所选文本

所以我试过: 在苹果文档中搜索

  • 搜索相关的UTI,但我知道UTI仅用于文件,而不用于简单的NSString(如果我错了,请纠正我)
  • 我已经尝试过实现共享扩展,但这不是我想要的解决方案,我不需要post弹出窗口,而且我需要在共享后启动我的应用程序,就像在Mail、Notes、iMessage中一样(关于苹果文档,我们不能通过共享扩展只通过今天的扩展启动包含应用程序)
  • 当然,我在StackOverFlow中搜索了很多
有什么解决办法吗?
谢谢

假设您已经有了一些应用程序

  • 添加目标文件->新建->目标。在里面 在左侧窗格中,从iOS部分选择应用程序扩展, 选择动作扩展,然后单击下一步
  • 设置产品名称。确保动作类型为显示用户界面。单击“完成”
  • 项目导航器中,展开扩展组并单击MainInterface.storyboard。选择图像视图并将其替换为UITextView。创建并将
    @IBOutlet
    弱var绑定到它
  • 选择扩展的Info.plist,导航到NSExtension->NSExtensionAttributes->NSExtensionActivationRule。将NSExtensionActivationRule的类型从
    String
    更改为
    Dictionary
    。展开词典后,单击词典旁边的+按钮。这将添加一个子密钥。将其名称设置为NSExtensionActivationSupportsText,将其类型设置为
    Boolean
    ,并将值设置为YES。这确保了操作扩展仅在至少一个输入项包含文本时可见
  • 将此代码放入ActionViewController.swift
  • _


    你可以关注或感谢,但你所附的链接并不能回答我的问题。我不知道如何使我的应用程序出现在UIActivityViewController中,以防共享原始帖子中所述的选定文本。我知道如何使用UTI,我成功地与PDF、JPG、TXT等共享。我只共享文本没有成功(选择特定文本并点击上面的共享按钮),如果你知道如何处理该问题,那将是非常棒的!谢谢。@NikhleshBagdiya你有什么解决办法吗?谢谢
    import UIKit
    import MobileCoreServices
    class ActionViewController: UIViewController {
    
        @IBOutlet weak var textView: UITextView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
        
            // Get the item[s] we're handling from the extension context.
            
            var textFound = false
            for item in self.extensionContext!.inputItems as! [NSExtensionItem] {
                for provider in item.attachments! {
                    if provider.hasItemConformingToTypeIdentifier(kUTTypePlainText as String) {
                        // This is an plain Text.
                        weak var weakTextView = self.textView
                        provider.loadItem(forTypeIdentifier: kUTTypePlainText as String, options: nil, completionHandler: { (textItem, error) in
                            OperationQueue.main.addOperation {
                                if let strongTextView = weakTextView {
                                    if let gotText = textItem as? String {
                                        strongTextView.text = gotText
                                        // do what you need with the text
                                    }
                                }
                            }
                        })
                        
                        textFound = true
                        break
                    }
                }
                
                if (textFound) {
                    // We only handle one text, so stop looking for more. You can do as you need.
                    break
                }
            }
        }
    
        @IBAction func done() {
            // Return any edited content to the host app.
            // This template doesn't do anything, so we just echo the passed in items.
            self.extensionContext!.completeRequest(returningItems: self.extensionContext!.inputItems, completionHandler: nil)
        }
    }