gpt4 book ai didi

xcode - 禁用导航栏中的 UIBarButton 项目并停止辅助弹出窗口

转载 作者:行者123 更新时间:2023-11-30 13:16:48 25 4
gpt4 key购买 nike

问题如下:我有一个带有导航栏的 iOS 9 应用程序(Swift),其中包含一堆 UIBarButtonItems,这些 UIBarButtonItems 与多个 UINavigationControllers 相连,最终将表格、 View 等显示为弹出窗口。当然,点击这些按钮之一不会自动禁用导航栏中的其他 UIBarButtonItems,用户可以自由点击它们。然而,当弹出窗口已经显示时,我们会收到以下警告,因为这是违反 HIG 的,也是拒绝的理由:

Attempt to present UINavigationControllerViewController which is already presenting (null)

要在显示弹出窗口后解决该问题,a) 需要禁用剩余的 UIBarButtonItems,b) 需要停止显示其他弹出窗口。

button A is still enabled

那么这里最好的行动理由是什么?弹出窗口的 View Controller 的 isBeingPresented 标志在管理 View Controller 中不可用,因为无法在另一个 View Controller 中创建一个 View Controller 的导出,并且 navigationController 的 viewControllers 数组不包含外部导航 Controller 或其后代。

我蹩脚的解决方法涉及一个全局 appIsPresentingPopover Bool,它在上述 View Controller 中的 viewDidLoad 中设置为 true ,在 viewDidDisappear 中设置为 false 。然后在控制 View Controller 的prepareForSegue方法中测试该Bool,以阻止其他弹出窗口的显示。还可以禁用任何已启用的 UIBarButtonItems,这些 UIBarButtonItems 现在都有一个 socket 。丑陋!

处理这种常见情况的标准方法是什么?

最佳答案

令人惊讶的简单解决方案,并且比我最初的尝试优雅得多。我为所有涉及的弹出窗口添加了 Segue 标识符和 UIViewController 类变量。在prepareForSegue 中,我将变量设置为目标 View Controller 。然后在 shouldPerformSegueWithIdentifier 中,我只需检查该弹出窗口变量是否为零。如果不是,我将关闭 UIViewController 并将其设置为 nil。最后,我还遵循了 Beau Nouvelle 的建议,让这些按钮保持点亮状态,以便用户可以直接在弹出窗口之间切换。再次感谢。

关于xcode - 禁用导航栏中的 UIBarButton 项目并停止辅助弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38135418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com