gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:12 24 4
gpt4 key购买 nike

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

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

但我希望自定义 UIViewController 类加载来自照片应用程序的选定图像,在打开时它就像邮件编辑器一样 mail extension on share sheet

所以我得到了这个示例,并按照来自以下 git hub 链接(第 2 个)的此源上的说明进行操作:

是的,看起来是4 years ago所以迁移并转换为Swift 4.1版本。在我修改这些更改并调试它之后。它不像在 GitHub gif 上那样工作。是的,在初始时间,当我触摸共享表上的扩展应用程序时,我可以显示和关闭 Controller 。但是在我解雇并再次尝试展示它之后,这次它在 GitHub gif 上没有反应。

Martin 只显示和隐藏 self.view of UINavigationController Y position value .一旦我按下 Cancel or 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(completion:(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: nil)
}
}

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

最佳答案

在您的 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(completion:@escaping (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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com