首页 > 解决方案 > 如何从一个 ViewController 的功能中更改属性?

问题描述

我有两个控制器,它们的名字是FirstViewControllerSecondViewController

FirstViewController是MainPage,我在UITextView这里添加一个。

var secondViewController: SecondViewController!

let textView: UITextView = {
    let textView = UITextView()
    //textView.font = UIFont.systemFont(ofSize: 20)
    textView.isEditable = true
    textView.keyboardDismissMode = .interactive
    textView.allowsEditingTextAttributes = true
    return textView
}()

override func viewDidLoad() {
    super.viewDidLoad()

    secondViewController = SecondViewController()

    setUpLayout() //do something like add the textView to the view
    addKeyboardObserver() //a function which observe the keyboard
}

然后我添加一个按钮以将 secondView 显示为键盘

@objc func showSecondView() {
    textView.resignFirstResponder()
    textView.inputView = secondViewController.view
    textView.becomeFirstResoonder()
}

然后我定义一个函数来关闭 secondView

func closeSecondView() {
    textView.resignFirstResponder()
    textView.inputView = nil
}

在我的SecondViewController

var firstViewController: FirstViewController!

override func viewDidLoad() {
    super.viewDidLoad()

    firstViewController = FirstViewController()

    self.view.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 300)
    self.view.backgroundColor = .cyan
}

然后我添加一个按钮来关闭 firstViewController 的自定义键盘

@objc func closeFontView() {
    print(123)
    firstViewController.closeSecondView()
}

结果是,打印了“123”,然后我在 处添加一个断点closeFontView(),它被调用。但是UI的变化没有出现。(键盘没有关闭)为什么?我该如何解决?

标签: iosswiftdelegates

解决方案


问题就在这里 [删除此行]

firstViewController = FirstViewController() // new instance not the real presented first

当你显示第二个时像这样连接它,这个里面(firstViewController

let second = ///
second.first = self
// present second

推荐阅读