0

我正在使用一个包含滚动视图的登录屏幕,并且在滚动视图中有两个带有登录按钮的文本字段。键盘隐藏在输入文本到文本框之间

scrollview用于调整iphone 5的屏幕尺寸。而我正在使用“标签手势”,因此如果任何用户在文本字段中输入文本并且想要隐藏键盘,则可以点击屏幕上的任何位置以隐藏键盘。用于标签手势功能是

- (void)viewDidLoad { 

NSLog(@"login view"); 

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTapGestureCaptured:)]; 
[self.scrollView addGestureRecognizer:singleTap]; } 

- (void)singleTapGestureCaptured:(UITapGestureRecognizer *)gesture 
{ 
[self.view endEditing:YES]; } 

我的问题是,当用户在文本框用键盘在输入文本的键盘的中间输入文本然后检测的标签手势并隐藏在中间的键盘。

我做了什么来解决这个问题: - 1)我改变了[self.view addGestureRecognizer:singleTap]。

2.)我用尺寸(0,0,360,400)在屏幕的顶部放置了一个视图,并将该手势应用于该视图,以便点击该视图将隐藏键盘,但仍然在用户通过调用手势键入键盘时隐藏方法

3)我还使用屏幕大小的一半滚动型按钮,以便taht用户可以点击任何地方隐藏keybaord但坎打字时甚至然后揣键盘调用Ÿ按钮的IBAction为方法的地点理想,

回答

2

用途:隐藏键盘并显示键盘: -

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 
    if (textField == username) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil]; 

    } 
    if (textField == password) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardDidShowNotification object:nil]; 

    } 

    return YES; 
} 

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField 
{ 
    if (textField == username) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardDidHideNotification object:nil]; 
    } 

    if (textField == password) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardDidShowNotification object:nil]; 

    } 
    return YES; 
} 


- (void)keyboardWillShow:(NSNotification *)notification 
{ 
    CGSize keyboardSize = [[[notification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 

    float newVerticalPosition = -keyboardSize.height + 100; 

    [self moveFrameToVerticalPosition:newVerticalPosition forDuration:0.3f]; 
} 


- (void)keyboardWillHide:(NSNotification *)notification 
{ 
    CGFloat kNavBarHeight = self.navigationController.navigationBar.frame.size.height; 
    [self moveFrameToVerticalPosition:kNavBarHeight forDuration:0.3f]; 
} 

- (void)moveFrameToVerticalPosition:(float)position forDuration:(float)duration 
{ 
    CGRect frame = self.view.frame; 
    frame.origin.y = position; 

    [UIView animateWithDuration:duration animations:^{ 
     self.view.frame = frame; 
    }]; 
} 
+0

感谢您的回应...我已经实现了您提供的相同代码...但它没有解决我的问题...我的问题在于,当键入键盘时通过调用手势方法自动隐藏。 –

+0

评论,tapgesture方法只有这个方法,我已经张贴在这里使用在你的项目中它会帮助你... – 2016-04-25 12:57:55

+0

好吧...谢谢我会评论标签手势....但之后,点击视图不会解雇键盘...我猜 ? –

3

删除Tapgesture并试试这段代码,它会有所帮助。

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 

    [self.view endEditing:YES]; 
} 
+0

我实现了它正在工作的方法,但在返回 –

+0

后,它会在顶部给出黑色空间,检查您为轻击手势放置的视图并检查滚动视图。 –

+0

与scrollview该方法没有得到调用... –

1

尝试这样,

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 

[textField1 resignFirstResponder]; 
[textField2 resignFirstResponder]; 
} 

希望这将有助于:)

+0

感谢您的回应....实际上我使用视图上的滚动视图....所以触摸方法将无法正常工作,直到我删除滚动视图和触摸只被检测到在自己的看法.... –

+0

然后添加该滚动视图上的视图,然后将文本框添加到该视图 – Lion

+0

因为我使整个功能自定义像根据屏幕大小移动文本字段与滚动视图...我只是删除选项卡手势和scrollview ......我用@aayush ans来自动调整键盘出现时的视图,并使用touchesBegan方法来处理触摸并隐藏键盘....再次感谢 –

2

我为它找到最佳的解决方案。首先,您将Pod“TPKeyboardAvoiding”,'〜> 1.2.3'集成在一起,然后添加TPKeyboardAvoidingScrollView类。它将处理所有数据。不必编写额外的代码。

+0

感谢您的回应....我将从现在起使用相同的 –