ios - 如何从一个 ViewController 的功能中更改属性?
问题描述
我有两个控制器,它们的名字是FirstViewController
和SecondViewController
这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的变化没有出现。(键盘没有关闭)为什么?我该如何解决?
解决方案
问题就在这里 [删除此行]
firstViewController = FirstViewController() // new instance not the real presented first
当你显示第二个时像这样连接它,这个里面(firstViewController
)
let second = ///
second.first = self
// present second
推荐阅读
- java - 视频breakIn、breakOut 使用SIP
- python - 根据另一个列表中的项目数创建多个新列表
- apache - RewriteCond 范围
- c++ - 尽管 .so 中存在符号但未定义的引用
- android - 如何调整视频大小并将其转换为 MPEG-4(mp42 编解码器)FFmpeg?
- android - 干净的架构:在域或演示文稿/应用程序中使用 CompositeDisposable
- android - 由于 Firebase 库,支持库的版本冲突
- c# - 在gridview中显示每个选定行的价格
- ethereum - 无法安装 web3 节点模块
- javascript - 我想在 React 中显示 Snack Bar