UITextView скрыть клавиатуру - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь отправить сообщение с фотографией на evernote.Я создал вид для этого

. Сначала я поставил UITextField для заголовка. Затем я добавил UITextView для сообщения и получил кнопку для прикрепления фотографии, и у меня есть один вид изображения для удержания изображения из UIImagePicker.Когда я пишу какой-то текст на UITextView, клавиатура будет закрывать кнопку прикрепления фото и кнопку изображения.Как скрыть клавиатуру ... или можно минимизировать высоту клавиатуры

Ответы [ 5 ]

1 голос
/ 30 мая 2011

Нет необходимости минимизировать высоту, вы можете сдвинуть вид вверх и после ввода текста вам нужно спрятать клавиатуру, поэтому для этого,

Скрыть клавиатуру. Либо добавьте панель инструментов над клавиатурой, либо добавьте кнопку панели в навигационную панель. и по нажатию кнопки

[youTextView resignFirstResponder];

для добавления панели инструментов сделайте панель инструментов под представлением make, и когда коснитесь текста View, делегат вызовет textViewShouldBeganEditing, при этом напишите что-то вроде этого

 CGRect tlFrame=yourToolBar.frame;
  tlFrame.origin.y-=40;  //check this according to you
  yourToolBar.frame=tlFrame.origin.y;

также добавьте анимацию и сделайте ее origin.y такой, какая она есть при скрытии клавиатуры.

0 голосов
/ 31 мая 2011

Вызовите этот метод кнопкой Готово

- (BOOL)textFieldShouldReturn:(UITextField *)textField {
   [textField resignFirstResponder];
   return NO;
}
0 голосов
/ 30 мая 2011

Ну, для этого вы можете анимировать вид как ..

CGFloat animatedDistance;   // in.h file

и в файле .m сделайте следующее

#pragma mark (Text View Delegate Method)
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if([text isEqualToString:@"\n"])
    {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}


- (void)textViewDidBeginEditing:(UITextView *)textView
{

    static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
    static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
    static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
    static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;
    static const CGFloat LANDSCAPE_KEYBOARD_HEIGHT = 162;

    CGRect textFieldRect;
    CGRect viewRect;

    textFieldRect =[self.view.window convertRect:textView.bounds fromView:textView];
    viewRect =[self.view.window convertRect:self.view.bounds fromView:self.view];


    CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
    CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
    CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;
    CGFloat heightFraction = numerator / denominator;

    if (heightFraction < 0.0)
    {
        heightFraction = 0.0;
    }
    else if (heightFraction > 1.0)
    {
        heightFraction = 1.0;
    }

    UIInterfaceOrientation orientation =[[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationPortrait ||orientation == UIInterfaceOrientationPortraitUpsideDown)
    {
        animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);
    }
    else
    {
        animatedDistance = floor(LANDSCAPE_KEYBOARD_HEIGHT * heightFraction);
    }

    CGRect viewFrame;

    viewFrame= self.view.frame;
    viewFrame.origin.y -= animatedDistance;


    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationBeginsFromCurrentState:YES];
    [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

    [self.view setFrame:viewFrame];

    [UIView commitAnimations];

}

- (void)textViewDidEndEditing:(UITextView *)textView
{
    if(textView.tag==0)
    {
        static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
        CGRect viewFrame;

        viewFrame= self.view.frame;
        viewFrame.origin.y += animatedDistance;

        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationBeginsFromCurrentState:YES];
        [UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];


        [self.view setFrame:viewFrame];
        [UIView commitAnimations];



    }
}

Это решит вашу проблему, так что там ничего не будет спрятано

0 голосов
/ 30 мая 2011

Удерживайте кнопку фона, и когда пользователь закончит вводить текстовое сообщение, вы можете ожидать, что пользователь нажмет где-то снаружи, чтобы эта кнопка фона принимала событие касания и отклоняла клавиатуру.

Что-то следующее:

-(IBAction) backgroundButtonPressed:(id) sender {
    [self.textView resignFirstResponder];
}
0 голосов
/ 30 мая 2011

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

...