我正在尝试在我的应用程序中实现一个按钮,我遇到了一些奇怪的行为。我有一个“撰写帖子”按钮,我将其添加到应用程序的关键窗口中。我想创建按钮并将其隐藏在某些情况下,例如导航控制器推送新视图控制器(即单击帖子)时。该应用程序设置如下:
Main
是一个故事板,它是一个自定义类型的 UITabController,MainTabViewController
它有 4 个选项卡,每个选项卡都有一个 UINavigationController,它有一个类型为 的容器BaseViewController
。
在我创建撰写按钮并将其作为子视图添加到键窗口的viewDidLoad
功能中,如下所示:MainTabViewController
func createButton(){
let keyWindow = UIApplication.shared.keyWindow
postButtonContainer = FanMenu...
keyWindow?.addSubview(postButtonContainer)
}
在BaseViewController
我使用viewWillDisappear
隐藏撰写按钮(即点击帖子时),然后viewWillAppear
通过设置isHidden
为真或假来显示撰写按钮。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
ComposeButtonManager.shared.hidePostButton()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
ComposeButtonManager.shared.showPostButton()
}
只有在我从 Xcode 启动后崩溃关闭应用程序后才会出现此问题。发生的事情是,当我在崩溃关闭后重新打开时 - 应用程序将正常加载并显示撰写按钮,但如果我从一个选项卡导航然后返回同一个选项卡,则撰写按钮不会显示。如果我单击帖子并导航回BaseViewController
子类,该按钮将重新出现。我不确定为什么在标签栏切换后按钮隐藏,当所有 UIViewControllers 调用取消隐藏按钮时,他们的视图就会出现。
当我从 Xcode 在我的手机上运行该项目时,我可以切换选项卡并且按钮不会消失,它只会在我崩溃关闭并与 Xcode 断开连接后发生,不知道为什么会这样。