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 键盘返回/完成/搜索色调颜色的主要内容,如果未能解决你的问题,请参考以下文章