使用Storyboard和自定义UITabBarController弹出Alert崩溃如何解决
问题解决方案
1. 解决按钮点击崩溃问题
崩溃原因有两个大概率触发点:
- 按钮绑定失效:打开Storyboard进入SettingsViewController的界面,右键点击触发事件的按钮,检查
Touch Up Inside的绑定列表,删除所有多余的无效绑定,重新绑定到当前的saveButtonPressed方法,unrecognized selector报错九成以上都是按钮绑定了不存在的方法导致。 - 弹窗调用逻辑错误:不需要通过tabBarController执行弹窗弹出,当前控制器本身就有present能力,把最后一行弹窗代码修改为:
self.present(alert, animated: true, completion: nil)
2. 解决UITabBarControllerDelegate不触发问题
你只声明了StarredViewController遵守代理协议,没有给TabBarController的代理属性赋值,只需要在SceneDelegate初始化TabBarController的代码末尾添加一行赋值即可:
tabBarController.delegate = starredViewControllerTab
添加后代理方法就能正常触发。
3. 解决前两个Tab沿用Storyboard旧配置的问题
你只给第三个StarredViewController的tabBarItem做了代码赋值,前两个视图控制器默认会读取Storyboard中设置的tabBarItem配置,你只需要给前两个也添加代码配置就可以覆盖Storyboard的设置,参考代码:
queryViewControllerTab.tabBarItem.title = "查询" queryViewControllerTab.tabBarItem.image = UIImage(systemName: "magnifyingglass") settingsViewControllerTab.tabBarItem.title = "设置" settingsViewControllerTab.tabBarItem.image = UIImage(systemName: "gearshape")
额外说明
你当前的SceneDelegate配置完全符合iOS15+的官方规范,不需要调整AppDelegate相关代码,Xcode13默认创建的项目的Scene配置都是正常可用的,不需要适配旧版本的AppDelegate接管rootViewController的逻辑。
内容的提问来源于stack exchange,提问作者Ste
相关产品推荐
相关产品推荐

