• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 与自定义类而不是 SLComposeServiceViewController 共享扩展

[复制链接]
菜鸟教程小白 发表于 2022-12-11 20:22:23 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在使用共享扩展功能。

当我在这里搜索很多时,似乎总是使用 SLComposeServiceViewController 将带有一些文本内容的图像共享给特定的应用程序。

但我希望自定义 UIViewController 类加载从照片应用程序中选择的图像,当打开 共享表上的邮件扩展名

时,它与邮件编辑器一样

所以我得到了这个示例,并按照下面的 git hub 链接(第二个)中的说明进行操作:

是的,似乎 4 年前 所以迁移并转换为 Swift 4.1 版本。在我修改了这些更改并调试它之后。它不像在 GitHub gif 上那样工作。是的,最初时,当我在共享表上触摸扩展应用程序时,我可以呈现和关闭 Controller 。但是在我解散并再次尝试呈现它之后,这一次它在 GitHub gif 上没有反应。

Martin 只显示和隐藏 UINavigationController Y 位置值的self.view。一旦我按下 Cancel 或 save 栏按钮,然后我尝试通过共享表上的扩展触摸打开它,它不起作用并且那里没有反应。

这里是 NSExtensionPrincipalClass - EntryViewController

的源代码
import UIKit  

@objc(EntryViewController)


class EntryViewController : UINavigationController {

init() {
    super.init(rootViewController: ShareViewController())
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)!
}

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    self.view.transform = CGAffineTransform(translationX: 0, y: self.view.frame.size.height)

    UIView.animate(withDuration: 0.25, animations: { () -> Void in
        self.view.transform = CGAffineTransform.identity
    }, completion: nil)
}
}

import UIKit
import Social

class ShareViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = .white
    self.navigationItem.title = "Share this"

    self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.cancelButtonTapped(_))
    self.navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .save, target: self, action: #selector(self.saveButtonTapped(_))
}

@objc func saveButtonTapped(_ sender: UIBarButtonItem) {
    self.hideExtensionWithCompletionHandler(completion: { (Bool) -> Void in
        self.extensionContext!.completeRequest(returningItems: nil, completionHandler: nil)
    })
}

@objc func cancelButtonTapped(_ sender: UIBarButtonItem) {
    self.hideExtensionWithCompletionHandler(completion: { (Bool) -> Void in
        self.extensionContext!.cancelRequest(withError: NSError())
    })
}

func hideExtensionWithCompletionHandler(completionBool) -> Void) {

    UIView.animate(withDuration: 0.20, animations: { () -> Void in
        self.navigationController!.view.transform = CGAffineTransform(translationX: 0, y: self.navigationController!.view.frame.size.height)
    }, completion: nil)
}
}

如何查找和修复上述尝试中的问题或如何进行自定义 UIViewController 布局而不是使用 SLComposeServiceViewController



Best Answer-推荐答案


在您的 View Controller 上(按钮操作方法)

objective-c

当你完成你的过程时调用它

[self.extensionContext completeRequestReturningItems[] completionHandler:nil];

当您/用户取消您的流程时调用它

NSError *error = [NSError errorWithDomain:NSCocoaErrorDomain code:NSUserCancelledError userInfo:nil];
[self.extensionContext cancelRequestWithError:error];

swift

当你完成你的过程时调用它

self.extensionContext?.completeRequestReturningItems([], completionHandler:nil)

当您/用户取消您的流程时调用它

let cancelError = NSError(domain: NSCocoaErrorDomain, code: NSUserCancelledError, userInfo: nil)
self.extensionContext!.cancelRequestWithError(cancelError)

如果您有任何 API 错误

self.extensionContext!.cancelRequestWithError(error as NSError)

更新

在您的代码中,您没有在此方法中调用完成处理程序 hideExtensionWithCompletionHandler

func hideExtensionWithCompletionHandler(completionescaping (Bool) -> Void) {
    UIView.animate(withDuration: 0.20, animations: { () -> Void in
        self.navigationController!.view.transform = CGAffineTransform(translationX: 0, y: self.navigationController!.view.frame.size.height)
    }, completion: { (_) -> Void in
        completion(true)
    })
}

关于ios - 与自定义类而不是 SLComposeServiceViewController 共享扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51382467/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap