在UISearchBar控件中,是否将键盘的搜索键标题更改为完成?更改UISearchBar /键盘搜索按钮标题
回答
对于命名tablesearchbar搜索栏:
// Set the return key and keyboard appearance of the search bar
for (UIView *searchBarSubview in [tableSearchBar subviews]) {
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)]) {
@try {
[(UITextField *)searchBarSubview setReturnKeyType:UIReturnKeyDone];
[(UITextField *)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
}
@catch (NSException * e) {
// ignore exception
}
}
}
由于警报式键盘是半透明的,我可以看到我的背后视图。它看起来不太好,因为我在键盘背后有多个元素,这使得键难以突出。我想要一个全黑键盘。
因此,当编辑文本时,我将黑色的UIImageView动画到键盘后面的位置。这给出了全黑键盘的外观。
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.25];
blackBoxForKeyboard.frame = CGRectMake(0, 377, 320, 216);
[UIView commitAnimations];
}
一个更有用的提示,向运行循环代码(在 “@try”)部分。
这使“完成”按钮,当文本字段为空:
UITextField *tf = (UITextField *)searchBarSubview;
tf.enablesReturnKeyAutomatically = NO;
谢谢!这也适用于iOS7的Gregory解决方案。 – jbandi 2014-03-08 17:24:27
,因为它与可选的方法的协议,你应该测试方法都单独,而不是尝试醒目的。
for (UIView *searchBarSubview in searchBar.subviews)
{
if ([searchBarSubview conformsToProtocol:@protocol(UITextInputTraits)])
{
// keyboard appearance
if ([searchBarSubview respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarSubview setKeyboardAppearance:UIKeyboardAppearanceAlert];
// return key
if ([searchBarSubview respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarSubview setReturnKeyType:UIReturnKeyDone];
// return key disabled when empty text
if ([searchBarSubview respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarSubview setEnablesReturnKeyAutomatically:NO];
// breaking the loop when we are done
break;
}
}
这将适用于iOS < = 6.对于iOS> = 7时,您需要循环中searchBar.subviews[0].subviews
。
由于iOS的7测试5,运行循环的回答并没有为我工作,但这并:
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
}
为防万一还不清楚,使用if/else的原因是if为iOS 6向后兼容性,其他为iOS 7. – 2013-09-18 14:13:23
奇妙的答案。这适用于iOS 7.谢谢 – Katushai 2014-08-18 20:40:22
这适用于iOS8 – 2015-03-31 17:05:44
我想这里显示的所有解决方案,和他们都不工作了我的UISearchBar(xcode5编译iOS7)。我结束了这个递归函数,它为我工作:
- (void)fixSearchBarKeyboard:(UIView*)searchBarOrSubView {
if([searchBarOrSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
if ([searchBarOrSubView respondsToSelector:@selector(setKeyboardAppearance:)])
[(id<UITextInputTraits>)searchBarOrSubView setKeyboardAppearance:UIKeyboardAppearanceAlert];
if ([searchBarOrSubView respondsToSelector:@selector(setReturnKeyType:)])
[(id<UITextInputTraits>)searchBarOrSubView setReturnKeyType:UIReturnKeyDone];
if ([searchBarOrSubView respondsToSelector:@selector(setEnablesReturnKeyAutomatically:)])
[(id<UITextInputTraits>)searchBarOrSubView setEnablesReturnKeyAutomatically:NO];
}
for(UIView *subView in [searchBarOrSubView subviews]) {
[self fixSearchBarKeyboard:subView];
}
}
然后我把它称为像这样:
_searchBar = [[UISearchBar alloc] init];
[self fixSearchBarKeyboard:_searchBar];
使用Xcode 5 + iOS7,文本输入将位于子子视图中而不是子视图中。所以基本上你使用我的Xcode 4解决方案并添加了递归调用。为获得最佳性能,您可以测试iOS版本,如果是iOS7,则可以浏览'subviews [0] .subviews'而不是'subviews'。 – 2014-01-15 13:21:46
至少为iOS 8,简单地说:
[self.searchBar setReturnKeyType:UIReturnKeyDone];
只是为了涵盖所有iOS版本:
NSArray *subviews = [[[UIDevice currentDevice] systemVersion] floatValue] < 7 ? _searchBar.subviews : _searchBar.subviews[0].subviews;
for (UIView *subview in subviews)
{
if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
{
UITextField *textField = (UITextField *)subview;
[textField setKeyboardAppearance: UIKeyboardAppearanceAlert];
textField.returnKeyType = UIReturnKeyDone;
break;
}
}
对于斯威夫特改变的UISearchBar
searchBar.returnKeyType = UIReturnKeyType.Done
的返回键
可枚举是如下
public enum UIReturnKeyType : Int {
case Default
case Go
case Google
case Join
case Next
case Route
case Search
case Send
case Yahoo
case Done
case EmergencyCall
@available(iOS 9.0, *)
case Continue
}
只是一个提醒!如果您将searchBar保留为第一响应者,那么在更改returnKeyType后,您需要关闭键盘并再次弹出以查看更改。
search.resignFirstResponder()
searchBar.returnKeyType = UIReturnKeyType.Done
search.becomeFirstResponder()
- 1. 如何禁用/启用UISearchBar键盘的搜索按钮?
- 2. 可可触摸 - UISearchBar键盘 - 隐藏'搜索'按钮
- 3. 无法隐藏键盘单击搜索按钮在UISearchBar
- 4. 搜索键盘中的搜索按钮
- 5. 我如何解雇键盘上关于UISearchBar的键盘上的搜索按钮?
- 6. 编程键盘上的搜索按钮
- 7. 检测键盘搜索按钮
- 8. Android键盘按钮更改
- 9. 更改UISearchBar搜索按钮上的UITableView数据源点击
- 10. 取消按钮解雇的UISearchBar键盘
- 11. Android键盘“开始”按钮到“搜索”
- 12. 隐藏键盘上的单击输入按钮或搜索按钮
- 13. iphone - UISearchBar上的搜索按钮
- 14. 无法更改UISearchBar中的取消按钮的标题
- 15. 使用搜索查看时隐藏软键盘上的搜索/搜索按钮?
- 16. Opencart 2更改搜索按钮颜色
- 17. 快速更改按钮标题后的后退按钮标题
- 18. 按钮每次按下更改标题
- 19. 更改按钮标题问题
- 20. UISearchBar键盘返回键
- 21. 使用iPhone多触点键盘搜索按钮
- 22. 在iPhone/iPad Safari浏览器键盘中显示'搜索'按钮
- 23. ios键盘上的搜索按钮不提交表格
- 24. 如何收听searchView中的键盘搜索按钮
- 25. 如何在键盘上创建动作来搜索按钮?
- 26. 更改USB键盘的按键
- 27. 如何更改Iphone sdk中的搜索栏取消按钮的标题?
- 28. 软键盘按钮
- 29. 如何在按下键盘按键时更改焦点不同的J按钮?
- 30. 如何按下键盘上的按键时更改按钮的外观。 JavaFx
这里我解释了http://stackoverflow.com/a/26712861/2981840 – Chidhambaram 2014-11-03 11:05:43