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.) я также использовал кнопку на Scrollview половины размера экрана так TAHT пользователь может щелкнуть в любом месте, чтобы скрыть keybaord но подоконник, печатая даже тогда клавиатура скрывает у вызова метода IBAction кнопки palced

ответ

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 только этот метод, который я разместил здесь, использует в вашем проекте, он вам поможет ... –

+0

okay ... спасибо, я буду комментировать вкладку gesture .... но после этого нажмите на представление, которое не будет отменено клавиатурой ...Я полагаю ? –

3

Удалить Tapgesture И попробуйте этот код, это будет полезно.

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

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

я реализовал метод, который он работает, но он возвращает черное пространство сверху после возврата –

+0

проверить вид, который вы разместили для жестов tap, а также проверить scrollview. –

+0

с scrollview метод не получает вызов ... –

1

попробовать, как это,

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

[textField1 resignFirstResponder]; 
[textField2 resignFirstResponder]; 
} 

надеюсь, что это поможет :)

+0

спасибо за ответ .... на самом деле я использую scrollview в представлении .... так что метод touch не будет работать, пока я не удалю scrollview, а касание было обнаружено только на собственном представлении .... –

+0

затем добавить вид на это scrollview, а затем добавить текстовое поле к этому виду – Lion

+0

, поскольку я сделал всю функциональность, например, перемещаю текстовое поле в соответствии с размером экрана с помощью scrollview ... я просто удалил жест вкладки и scrollview ...... я использовал @aayush и автоматическую настройку вида, когда клавиатура появляется и используется метод touchhesBegan для управления прикосновением и спрятать клавиатуру .... спасибо снова –

2

Я нашел лучшее решение для этого. Сначала вы интегрируете модуль «TPKeyboardAvoiding», «~> 1.2.3» и просто добавьте класс TPKeyboardAvoidingScrollView. Он будет обрабатывать все. Не нужно писать дополнительный код.

+0

спасибо за ответ .... я буду использовать то же самое с этого момента –