【问题标题】:Change tintcolor of navigationbar PKAddPassesViewController更改导航栏 PKAddPassesViewController 的 tintcolor
【发布时间】:2014-05-09 10:02:46
【问题描述】:

我正在我的 iOS 应用程序中集成一个存折系统。我正在使用 PassKit 框架(显然;))。我正在为我的所有导航项使用自定义色调颜色。是否可以更改“取消”和“添加”按钮的颜色? (来自 te PKAddPassesViewController)蓝色在我的设计中看起来很糟糕。

谢谢

【问题讨论】:

    标签: ios objective-c xcode5 passbook


    【解决方案1】:

    在 iOS 9 中,按钮颜色可以更改。子类化 PKAddPassesViewController 并在 viewWillAppear 中设置窗口 tintcolor,并确保在 viewWillDisappear 中将其设置回。然后使用您的子类而不是 PKAddPassesViewController:

    MyPKAddPassesViewController.h:

    #import <PassKit/PassKit.h>
    
    @interface LHPKAddPassesViewController : PKAddPassesViewController
    
    @end
    

    MyPKAddPassesViewController.m:

    #import "LHPKAddPassesViewController.h"
    
    @implementation LHPKAddPassesViewController
    
    - (void) viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        ((UIWindow *)[UIApplication sharedApplication].keyWindow).tintColor = [UIColor greenColor];
    }
    
    - (void) viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
        ((UIWindow *)[UIApplication sharedApplication].keyWindow).tintColor = [UIColor whiteColor];
    }
    
    @end
    

    【讨论】:

      【解决方案2】:

      在 iOS 9 中有一个简单的方法可以做到这一点。在 PKAddPassesViewController 的调用者中使用这个:

      PKAddPassesViewController *addToPassbookController = init...
      
      [addToPassbookController.view setTintColor:[UIColor blackColor];
      

      【讨论】:

      • 这在 iOS 11 上不起作用(我没有尝试过早期版本)。
      【解决方案3】:

      我认为您无法更改 tintcolor。由于 iOS 6 此类 viewController 基于remote view controllers,这意味着它们的视图完全由另一个进程拥有并且无法通过编程方式访问。

      这可以通过查看控制器视图的递归描述来确认:

      <UIView: 0x140b0780; frame = (0 0; 320 568); layer = <CALayer: 0x140b0860>>
      |    | <_UISizeTrackingView: 0xe3b7300; frame = (0 20; 320 548); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0xe3b7410>>
      |    |    | <_UIRemoteView: 0xe3b9b80; frame = (0 0; 320 568);
      

      _UIRemoteView 表示视图的内容托管在另一个进程中。

      编辑:

      很好奇MFMailComposeViewController 可以工作。这个 viewController 有一个可寻址的导航栏控制器。

      【讨论】:

      • 那你是怎么做到的呢? :)。我无法更改 PKPassesViewController 的导航控制器.. :)
      • 我无法为 PKPassesViewController 更改它,因为它具有除 MFMailComposeViewController 之外的其他实现。 PKPassesViewController 没有可以从代码中看到/可访问的 NavigationController。
      【解决方案4】:

      在 Storyboard 中,选择 UINavigationController 的导航栏,然后选择色调颜色

      希望对你有帮助

      【讨论】:

      • 似乎找不到这个?我以编程方式更改颜色。但这不起作用: [addController.navigationController.navigationBar setTintColor:[GColor orangeAccentColor]]; [self presentViewController:addController 动画:YES 完成:nil];
      • 您的 StoryBoard 中有 uiNavigationContoller 吗?
      • 是的,我什至有三个 ;)。但我不知道(pkaddpassesviewcontroller 的顶部的栏是否称为导航栏。它不是推送转场,而是模态转换。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 2018-04-03
      • 1970-01-01
      相关资源
      最近更新 更多