- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试为我的用户提供一种关闭键盘的方法,无论是通过在键盘外部单击还是通过在键盘本身上放置一个 DONE 按钮。
我创建了一个完成按钮,它在 iOS 6 上运行良好:
UIToolbar *keyboardToolbar;
keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 44, 320, 44)];
UIBarButtonItem *flexItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"dismiss_keyboard", nil) style:UIBarButtonItemStyleDone target:self action:@selector(dismissKeyboard)];
NSArray *items = [NSArray arrayWithObjects:flexItem,doneItem, nil];
[keyboardToolbar setItems:items animated:YES];
for (UIView *subview in [searchBar subviews])
{
if( [subview isKindOfClass:[UITextField class]] )
{
((UITextField*)subview).delegate=self;
((UITextField*)subview).inputAccessoryView = keyboardToolbar;
break;
}
}
但是在 iOS 7 上找不到这个按钮。
我也尝试过使用用户可以点击键盘以外的任何地方并使其消失的方法:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesBegan:touches withEvent:event];
//Code to dismiss keyboard.
}
但我的 View 包含一个 UISearchBar
和一个 UITableView
但是当我触摸它们时 touchesBegan
事件不会触发,只有当我触摸时父 UIView,它是不可见的,因为它被我的 UISearchBar
和我的 UITableView
覆盖了。我必须触摸两者之间的微小空间才能触发事件。
如何使我的 touchesBegan
方法应用于屏幕上的任何对象?为什么我的 DONE 按钮没有出现在 iOS 7 中?
最佳答案
Why is my DONE button not showing up in iOS 7?
您的 DONE 按钮未显示,因为您不应该修改的 UISearchBar 的内部结构已更改。 (这就是您不应该修改它的原因。)
如果你想继续这个不推荐的行为并让它工作,而不是检查它是否是一个 UITextField,你可以尝试检查它是否符合 UITextInputTraits,并遍历 subview 的 subview :
for(UIView *subView in [searchBar subviews]) {
if([subView conformsToProtocol:@protocol(UITextInputTraits)]) {
// iOS 6
[(UITextField *)subView setReturnKeyType: UIReturnKeyDone];
} else {
// iOS 7
for(UIView *subSubView in [subView subviews]) {
if([subSubView conformsToProtocol:@protocol(UITextInputTraits)]) {
[(UITextField *)subSubView setReturnKeyType: UIReturnKeyDone];
}
}
}
(此代码来自this SO answer。)
但是,这种方法不推荐,因为它可能会在 iOS 7.1 中再次崩溃。作为一种递归方法,它还可以更具弹性。
How can I make my
touchesBegan
method apply to any object on the screen?
触摸事件由顶层 View 处理,因此只有当其他 View 不需要它们时,UIView 才会获取它们。这里最简单的方法是制作一个覆盖整个屏幕的不可见 UIButton,如果它被点击,关闭键盘并移除按钮。
关于iOS 7 : How to hide the DONE button on the keyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19869101/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!