- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有 UIScrollView 的 View 并且有很多 UITextField
我在触摸 View 后关闭键盘并且它工作正常同时我想在滚动时关闭键盘风景。我的问题是当我 ScrollView 时它正在关闭键盘但它调用方法 (keyboardWillHide) 两次,这对我设置屏幕错误造成了问题。如何防止调用该方法两次?
我的代码:
- (void)viewDidLoad {
[super viewDidLoad];
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(closeTextInput)];
tapGesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapGesture];
_scrllView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self
name:UIKeyboardWillHideNotification
object:nil];
}
-(void)keyboardWillHide {
if (self.view.frame.origin.y >= 0)
{
[self setViewMovedUp:YES];
}
else if (self.view.frame.origin.y < 0)
{
[self setViewMovedUp:NO];
}
}
-(void)setViewMovedUp:(BOOL)movedUp{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.3];
CGRect rect = self.view.frame;
if (movedUp)
{
if (self.view.frame.origin.y != -kOFFSET_FOR_KEYBOARD){
rect.origin.y -= kOFFSET_FOR_KEYBOARD;
rect.size.height += kOFFSET_FOR_KEYBOARD;
}
}
else
{
rect.origin.y += kOFFSET_FOR_KEYBOARD;
rect.size.height -= kOFFSET_FOR_KEYBOARD;
}
self.view.frame = rect;
[UIView commitAnimations];
}
最佳答案
尝试保留一个 BOOL keyboardIsUp,如果键盘弹起则为真,然后在输入函数 keyboardWillHide 时询问 keyboardIsUp 是否为真。如果是真的,继续。如果为假,则退出函数:
-(void)keyboardWillHide
{
if (keyboardIsUp == NO)
return;
else
//your code
您的函数仍将被调用两次或更多次,但只会执行一次其功能。只需确保在适当的时候将 keyboardIsUp 设置为 YES 和 NO。
关于ios - uikeyboardwillhidenotification 滚动时调用方法两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30845026/
我试图在我的 KeyboardScrollController 类中获取键盘通知,但是我得到了无法识别的 UIKeyboardWillHideNotification 和 UIKeyboardDidS
我已经注册了两个 UIKeyboardNotifications(keyboardWillShow 和 keyboardWillHide)并且都被触发了。当文本字段移回原始位置的动画仅在键盘消失后才被
我有一个带有 UIScrollView 的 View 并且有很多 UITextField 我在触摸 View 后关闭键盘并且它工作正常同时我想在滚动时关闭键盘风景。我的问题是当我 ScrollView
在我的一个项目中,当键盘显示并按下完成按钮时,我首先调用 textFieldDidEndEditing,然后它将触发 UIKeyboardWillHideNotification 的目标函数。然而,在
我已经实现了滚动功能,其中文本字段不会从键盘隐藏。因此,我正在使用 UIKeyboardDidShowNotification 和 UIKeyboardWillHideNotification,滚动发
我有一个 UIView,其中包含 UITexView 和一个 Button。我有一个委托(delegate) UITextViewDelegate。 当我第一次在 UITextView 上设置光标时,
我的 View 中有几个 UITextField(每个都在一个 UITableViewCell 中)。当从任何文本字段触发键盘时,我需要制作一些动画,主要是更改 UITableView 的框架。当键盘
在最近更新 Xcode 之后,这段以前可以工作的代码不再工作了。大多数 Selector(":") 都具有自动更正功能,但以下代码除外: override func viewDidLoad() {
在 iOS 8 之前一切正常。但是,当用户点击文本字段控件时,会直接出现在 UIKeyboardWillHideNotification 通知中登录控制台-找不到支持type 4 for keyboa
我是一名优秀的程序员,十分优秀!