Клавиатура скрывает UITextField.Как это решить? - PullRequest
3 голосов
/ 22 июня 2011

У меня есть текстовое поле, которое находится внизу экрана.Когда я начинаю редактирование, появляется клавиатура, которая скрывает текстовое поле.

Кто-нибудь может подсказать, как это решить?

Ответы [ 5 ]

6 голосов
/ 22 июня 2011

Вы можете использовать следующий код в двух разных методах, вызывать его, когда редактирование начинается и заканчивается, для перемещения вашего взгляда вверх и вниз (просто измените значение, которое было вычтено в yourView.frame.origin.y-100, чтобы настроить в соответствии с вашими потребностями)

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:0.5];      
    yourView.frame = CGRectMake(yourView.frame.origin.x, yourView.frame.origin.y-100, yourView.frame.size.width, yourView.frame.size.height);

    [UIView commitAnimations];
6 голосов
/ 22 июня 2011

Обычно вы помещаете содержимое в представление прокрутки и перемещаете представление прокрутки вверх, когда появляется клавиатура. Есть много уроков, так что гуглите их. Here является одним из них.

4 голосов
/ 22 июня 2011

Смотрите этот фрагмент кода.И используйте одну кнопку UIB, чтобы закрыть UIKeyboard.

- (void) animateTextField: (UITextField *)textField up:(BOOL) up
{
const int movementDistance = 200;
const float movementDuration = 0.4f;

int movement = (up ? -movementDistance : movementDistance);

up ? (self.button.enabled= YES) : (self.button.enabled = NO);

[UIView beginAnimations: @"anim" context: nil];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration: movementDuration];
self.view.frame = CGRectOffset(self.view.frame, 0, movement);
[UIView commitAnimations];
}

-(void)textFieldDidBeginEditing:(UITextField*) inTextField
{
[self animateTextField:mText up:YES];
[self addObservers];
}

- (void)addObservers 
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:@"UITextFieldTextDidChangeNotification" object:nil];    
}

- (void)textFieldDidChange:(NSNotification*)aNotification 
{
   NSLog(@"TextField data=%@",mText.text);
}   

- (IBAction) doneBtn:(id)sender
{
[mText resignFirstResponder ];
[self animateTextField:mText up:NO];
}
2 голосов
/ 22 июня 2011

Когда вы нажимаете на клавиатуре textField вверх, тогда текстовое поле скрывается за ней. так что, что вам нужно, вам нужно сделать так, чтобы клавиатура не была решением проблемы. так что для просмотра используйте

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField  delegate for the logic. now see the code

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{

    if(textField.tag==1)  //add tag to your textField to identify it
    {

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:.3];

        CGRect viewFrame=self.view.frame;
        viewFrame=sinViewFrame.size.height+100;
        viewFrameorigin.y-=100; // as required
        self.view.frame=viewFrame;
        [UIView commitAnimations];

   }

}

надеюсь, это поможет вам.

0 голосов
/ 16 марта 2014

Я использую ограничение автоматического макета для решения этой проблемы.Я держу ограничение как свойство и играю с ним, когда клавиатура появляется / исчезает.Я просто перемещаю представления над текстовым полем за пределы экрана, а текстовое поле вверх.После окончания редактирования я перемещаю их по ограничению в исходное положение.

-(void)keyboardWillShow:(NSNotification*)notification{
[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionTransitionNone animations:^{
    self.topSpaceLayoutConstraint.constant = -150;
    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];
} completion:NULL];
}

-(void)keyboardWillHide:(NSNotification*)notification
{
[UIView animateWithDuration:0.25 delay:0.0 options:UIViewAnimationOptionTransitionNone animations:^{
    self.topSpaceLayoutConstraint.constant = 10;
    [self.view setNeedsLayout];
    [self.view layoutIfNeeded];
} completion:NULL];
}

@property (weak, nonatomic) IBOutlet NSLayoutConstraint *topSpaceLayoutConstraint;
...