【发布时间】:2014-05-09 10:02:46
【问题描述】:
我正在我的 iOS 应用程序中集成一个存折系统。我正在使用 PassKit 框架(显然;))。我正在为我的所有导航项使用自定义色调颜色。是否可以更改“取消”和“添加”按钮的颜色? (来自 te PKAddPassesViewController)蓝色在我的设计中看起来很糟糕。
谢谢
【问题讨论】:
标签: ios objective-c xcode5 passbook
我正在我的 iOS 应用程序中集成一个存折系统。我正在使用 PassKit 框架(显然;))。我正在为我的所有导航项使用自定义色调颜色。是否可以更改“取消”和“添加”按钮的颜色? (来自 te PKAddPassesViewController)蓝色在我的设计中看起来很糟糕。
谢谢
【问题讨论】:
标签: ios objective-c xcode5 passbook
在 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
【讨论】:
在 iOS 9 中有一个简单的方法可以做到这一点。在 PKAddPassesViewController 的调用者中使用这个:
PKAddPassesViewController *addToPassbookController = init...
[addToPassbookController.view setTintColor:[UIColor blackColor];
【讨论】:
我认为您无法更改 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 有一个可寻址的导航栏控制器。
【讨论】:
在 Storyboard 中,选择 UINavigationController 的导航栏,然后选择色调颜色
希望对你有帮助
【讨论】: