在UIActivityViewController中更改UIBarButtonItems的色调颜色

时间:2016-09-29 13:27:44

标签: ios swift uiactivityviewcontroller

我有一个导航栏,在深色背景颜色上使用白色调颜色。我使用UIActivityViewController与iOS共享表共享链接。

当我选择WhatsApp或Messages应用程序来共享内容时,导航按钮具有默认的蓝色色调。此外,搜索栏(在WhatsApp的情况下)具有灰色色调,这使得难以阅读。

我无法改变色调颜色。我的代码:

let textToShare = "Visit my website!"
if let myWebsite = NSURL(string: "http://google.com") {
    let objectsToShare = [textToShare, myWebsite]
    let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)

    self.presentViewController(activityVC, animated: true, completion: {
        activityVC.navigationController?.navigationBar.tintColor = UIColor.whiteColor()
        activityVC.navigationController?.navigationItem.rightBarButtonItem?.tintColor = UIColor.whiteColor()   
        activityVC.navigationController?.navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
    })
}

有什么想法吗?

编辑:

这不是一个重复的问题,因为它与活动视图控制器的按钮色调颜色无关。它是关于视图控制器的导航控制器的按钮颜色,如图所示。按下iMessage上的分享。

3 个答案:

答案 0 :(得分:1)

您可以通过在app delegate的UIWindow实例上设置tintColor来为UIActivityViewController提供的视图控制器设置tintColor。无论何时或如何设置,在UIActivityViewController上设置tintColor似乎都没有效果。

在你的app delegate:

    self.window.tintColor = [theme navBarItemsTintColor];

答案 1 :(得分:0)

以上两种解决方案都不适用于我,但是我发现了另一种设置tintColor的方法-通过TextAttributes。在initviewDidLoad()的UIActivityViewController中,添加以下代码(是的,仅自iOS 11起可用):

override func viewDidLoad() {
   super.viewDidLoad()

   if #available(iOS 11.0, *) {
      let normalAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.purple]
      UIBarButtonItem.appearance().setTitleTextAttributes(normalAttributes, for: .normal)

      let disabledAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.gray]
      UIBarButtonItem.appearance().setTitleTextAttributes(disabledAttributes, for: .disabled)
   }
}

此外,如果您打算仅更改当前ViewController的颜色(在我们的示例中为UIActivityViewController),请不要忘记在关闭时重置值,因为appearance()是整个样式的全局样式集应用程序。

答案 2 :(得分:0)

在iOS 14.2上共享文件的情况下,我必须使用所有这3行来更改“保存”,“取消”和文件夹图标的颜色:

UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .blue
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .blue
UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: .blue], for: .normal)

并且在离开视图时必须将其改回

  activityVC.completionWithItemsHandler = { (_, _: Bool, _: [Any]?, _: Error?) in
  UIButton.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.self]).tintColor = .white
  UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: .white], for: .normal)
}

我承认它看起来很丑,但这是唯一对我有用的东西