UIDocumentPickerViewController 按钮看起来已禁用但有效 - 为什么?
UIDocumentPickerViewController buttons look disabled but work -- why?
我正在使用 UIDocumentPickerViewController 将图像导出到 iOS 中的文件应用程序 11. 选择器出现,我可以为文件选择一个目的地。我收到文件已移动的回调,我可以在文件中看到它们,所以看起来工作正常。然而,UI 是错误的——添加和取消按钮看起来被禁用了,但它们实际上工作正常。如果我只是在共享 Sheet 中使用“保存到文件”,按钮看起来就不会这样。
这是我的代码:
UIDocumentPickerViewController *docPicker =
[[UIDocumentPickerViewController alloc] initWithURLs:self.assetURLs inMode:UIDocumentPickerModeExportToService];
docPicker.delegate = self;
[vc presentViewController:docPicker animated:YES completion:nil];
我尝试过的事情:
1) 我已经尝试了 Move 和 Export 类型
2) 我启用了 iCloud 功能(所有三项:键值、文档和 CloudKit)——体验上没有差异 [事实上,即使没有这些设置,代码也能正常工作,尽管文档另有说明] )
这是 UI 的截图。如您所见,UI 表示它将把项目添加到所选目录(事实上,如果我点击添加,它就会这样做):
有谁知道如何让按钮显示为蓝色并看起来已启用?我还没有在网上找到任何我可以尝试的示例代码——如果有人有指点,我可以试试看它是否与我的配置或代码有关。
根据您的评论,您的应用正在使用 UINavigationBar.appearance
设置 tintColor
。这将影响所有导航栏,包括系统导航控制器的导航栏,例如 UIDocumentPickerViewController
.
我已经在我自己的一个应用程序中处理过这个问题。一种解决方案是继承 UIDocumentPickerViewController
并在需要选择器视图的任何地方使用您的子类。在您的子类中,覆盖 viewDidLoad
并将 UINavigationBar.appearance.tintColor
设置回 nil
。并且还覆盖 viewWillDisappear
以将 UINavigationBar.appearance.tintColor
重置为所需的颜色。
我不太喜欢像批准的答案中建议的那样临时更改全局外观。您只需重置 UIDocumentPickerViewController 的外观,栏按钮就会 return 恢复为原来的蓝色。
if #available(iOS 11.0, *) {
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}
我正在使用 UIDocumentPickerViewController 将图像导出到 iOS 中的文件应用程序 11. 选择器出现,我可以为文件选择一个目的地。我收到文件已移动的回调,我可以在文件中看到它们,所以看起来工作正常。然而,UI 是错误的——添加和取消按钮看起来被禁用了,但它们实际上工作正常。如果我只是在共享 Sheet 中使用“保存到文件”,按钮看起来就不会这样。
这是我的代码:
UIDocumentPickerViewController *docPicker =
[[UIDocumentPickerViewController alloc] initWithURLs:self.assetURLs inMode:UIDocumentPickerModeExportToService];
docPicker.delegate = self;
[vc presentViewController:docPicker animated:YES completion:nil];
我尝试过的事情:
1) 我已经尝试了 Move 和 Export 类型
2) 我启用了 iCloud 功能(所有三项:键值、文档和 CloudKit)——体验上没有差异 [事实上,即使没有这些设置,代码也能正常工作,尽管文档另有说明] )
这是 UI 的截图。如您所见,UI 表示它将把项目添加到所选目录(事实上,如果我点击添加,它就会这样做):
有谁知道如何让按钮显示为蓝色并看起来已启用?我还没有在网上找到任何我可以尝试的示例代码——如果有人有指点,我可以试试看它是否与我的配置或代码有关。
根据您的评论,您的应用正在使用 UINavigationBar.appearance
设置 tintColor
。这将影响所有导航栏,包括系统导航控制器的导航栏,例如 UIDocumentPickerViewController
.
我已经在我自己的一个应用程序中处理过这个问题。一种解决方案是继承 UIDocumentPickerViewController
并在需要选择器视图的任何地方使用您的子类。在您的子类中,覆盖 viewDidLoad
并将 UINavigationBar.appearance.tintColor
设置回 nil
。并且还覆盖 viewWillDisappear
以将 UINavigationBar.appearance.tintColor
重置为所需的颜色。
我不太喜欢像批准的答案中建议的那样临时更改全局外观。您只需重置 UIDocumentPickerViewController 的外观,栏按钮就会 return 恢复为原来的蓝色。
if #available(iOS 11.0, *) {
UINavigationBar.appearance(whenContainedInInstancesOf: [UIDocumentBrowserViewController.self]).tintColor = nil
}