iOS7 键盘返回/完成/搜索色调颜色

Posted

技术标签:

【中文标题】iOS7 键盘返回/完成/搜索色调颜色【英文标题】:iOS7 Keyboard Return/Done/Search tint colour 【发布时间】:2013-10-19 11:58:11 【问题描述】:

使用新的 ios7 UIView 色调,快速为整个应用设置主题变得非常容易。它甚至在编辑 UITextFields 时会改变文本插入符号的颜色。

但是,键盘右下角的“关闭”按钮(可以是完成、搜索等)始终为蓝色。有没有办法改变这个?如果它与应用程序其余部分的色调颜色相匹配,它看起来会非常漂亮。

【问题讨论】:

【参考方案1】:

通过一些小技巧,也许您可​​以实现您正在寻找的效果。但它可能无法通过应用审核。

-(NSArray*)subviewsOfView:(UIView*)view withType:(NSString*)type
    NSString *prefix = [NSString stringWithFormat:@"<%@",type];
    NSMutableArray *subviewArray = [NSMutableArray array];
    for (UIView *subview in view.subviews) 
        NSArray *tempArray = [self subviewsOfView:subview withType:type];
        for (UIView *view in tempArray) 
            [subviewArray addObject:view];
        
    
    if ([[view description]hasPrefix:prefix]) 
        [subviewArray addObject:view];
    
    return [NSArray arrayWithArray:subviewArray];


-(void)addColorToUIKeyboardButton
    for (UIWindow *keyboardWindow in [[UIApplication sharedApplication] windows]) 
        for (UIView *keyboard in [keyboardWindow subviews]) 
            for (UIView *view in [self subviewsOfView:keyboard withType:@"UIKBKeyplaneView"]) 
                UIView *newView = [[UIView alloc] initWithFrame:[(UIView *)[[self subviewsOfView:keyboard withType:@"UIKBKeyView"] lastObject] frame]];
                newView.frame = CGRectMake(newView.frame.origin.x + 2, newView.frame.origin.y + 1, newView.frame.size.width - 4, newView.frame.size.height -3);
                [newView setBackgroundColor:[UIColor greenColor]];
                newView.layer.cornerRadius = 4;
                [view insertSubview:newView belowSubview:((UIView *)[[self subviewsOfView:keyboard withType:@"UIKBKeyView"] lastObject])];

            
        
    

我用来解码视图层次结构的应用是:http://revealapp.com/

最终结果是这样的:

【讨论】:

哈,在我提出这个问题后,我下载并测试了 Reveal,以试验你在上面所做的。有人在已发布的应用程序上尝试过吗?对审核过程有何反馈? 我认为它可能会通过审核。在此处查看此问题:http://***.com/questions/4202817/can-i-tint-black-a-uikeyboard-if-so-how 或者,您可以尝试在键盘后面放置彩色视图以对其进行总体着色。 如果你能投票给我的答案,我真的很高兴。我是 SO 新手,我的代表真的很低,阻止我发布直接图片,投票等。谢谢 没有问题,完成。请注意,如果您完全回答了这个问题,我会立即投赞成票。基本上你的答案只是解决方案的一半(找到“完成/搜索”键 UIView)。您添加的叠加层与密钥不匹配。我通过 Reveal 发现了同样的事情。这种方法的主要问题是私有类 UIKBKeyView 绘制了整个东西,并且似乎没有公开任何改变背景颜色的方法。作为一个完整的答案,我希望它包含更改与当前键边界匹配的键颜色的代码。 是否有人可以使用自定义彩色完成按钮通过审核?【参考方案2】:

您不能更改按钮色调颜色,但您可以使用UIKeyboardAppearance 设置keyboard 色调颜色

示例yourTextField.keyboardAppearance = UIKeyboardAppearanceDark;

这是Apple提供的一个非常好的文档,请看这里:

Managing the Keyboard

【讨论】:

谢谢,但我已经知道深色/浅色键盘了。我的问题是关于键盘上的“关闭”按钮。它似乎与苹果的默认 iOS7 色调相匹配,所以希望它也能够被更改 - 但看起来不像。 您当然可以更改键盘窗口的色调。它没有记录在案,您必须在视图层次结构中找到它。我会说这是一个非常轻量级的补丁。【参考方案3】:
let colors: [UIColor] = [.red, .blue, .green, .purple, .yellow, .orange, .brown]

if let window = UIApplication.shared.windows.first(where:  
    $0.isType(string: "UIRemoteKeyboardWindow") 
) 
    if let keyplaneView = window.subview(ofType: "UIKBKeyplaneView") 
        for (i, keyView) in keyplaneView.subviews.filter(
            $0.isType(string: "UIKBKeyView") 
        ).enumerated() 
            let view = UIView(frame: keyView.bounds)
            view.backgroundColor = colors[i].withAlphaComponent(0.5)
            keyView.addSubview(view)
        
    

这是UIKBKeyplaneView中键的颜色图:

【讨论】:

以上是关于iOS7 键盘返回/完成/搜索色调颜色的主要内容,如果未能解决你的问题,请参考以下文章

iOS13导航栏后退栏按钮项目色调颜色

iOS7.1颜色变化,如何改变搜索栏颜色?

无法在 iOS 8 中将搜索栏色调更改为透明

UISlider 最小和最大轨道色调清除颜色 iOS 7.1 错误

iOS 7 色调颜色去饱和通知

在 iOS 7 上更改标签栏色调颜色