微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xcode:didTransition 不会在 iMessage 扩展中运行

如何解决Xcode:didTransition 不会在 iMessage 扩展中运行

我正在制作一个使用 didTransition(to:) 的 iMessage 扩展。但是,当我在模拟器中调整 iMessage 扩展的大小时,该功能不会运行。我做错了什么吗?

这是我的代码

import UIKit
import Messages

class EditorViewController: MSMessagesAppViewController {
    @IBOutlet weak var input: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()
        
        input.text = "not changed"
    }

    // This part isn't working:

    override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
        input.text = "changed"
    }
}

当我在模拟器中调整它的大小时,没有任何反应。 input.text 会更改 UITextView 函数中的 viewDidLoad() 文本,但不会更改 didTransition(to) 函数中的文本,因为它永远不会运行。

我做错了吗?

EditorViewController 是由 show (e.g. Push) segue 提供的视图控制器,并附加了一个 NavigationController

这是它没有改变的 gif:

A gif of the input not changing when the iMessage extension is resized


输入的文本永远不会改变

我该如何解决这个问题?

编辑:当视图控制器嵌入到导航控制器中时,willTransitiondidTransition 函数不会运行。有没有办法来解决这个问题? (它在没有导航控制器的情况下工作,但我需要这个项目的导航控制器)。

解决方法

正如此 answer 中所指出的,iMessage 应用程序的入口点需要是 MSMessagesAppViewController 的子类,因此您不能将 NavigationViewController 直接用作根控制器,除非 Apple 添加对此行为的支持。

但按照建议,您可以通过以下解决方法解决此问题:

import UIKit
import Messages

class MyRootVC: MSMessagesAppViewController {
    var navVC: UINavigationViewController!
    var editorVC: EditorViewController!
    
    func viewDidLoad() {
        super.viewDidLoad()

        editorVC = UIStoryboard(name: "Main",bundle: nil).instantiateInitialViewController() as! EditorViewController
    
        navVC = UINavigationController(rootViewController: editorVC)
        self.addChild(navVC)
        self.view.addSubview(navVC.view)
        navVC.didMove(toParent: self)
    }

    override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
        editorVC.input.text = "changed"
    }
}

class EditorViewController: UIViewController {
    @IBOutlet weak var input: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()
    
        input.text = "not changed"
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。