2013-11-01 2 views
1

Я довольно новый разработчик iPhone, и я работаю над iPhone-приложением, у которого есть представление, где пользователю нужно вводить ввод в несколько UITextView. Всего 6 UITextViews, и когда появляется представление, все текстовые представления видны без необходимости прокрутки. Но когда пользователь нажимает на первое текстовое представление для ввода текста, последние 2 текстовых вида становятся скрытыми с клавиатуры, и я не могу понять, как добавить возможность прокрутки, чтобы пользователь мог прокручивать, когда клавиатура видна , Я использую UIScrollView, но в настоящее время у меня нет кода, чтобы он работал, так как я пробовал несколько разных вещей, которые я нашел онлайн, и никто не работал. Это может быть простое решение, но я просто из идей и застрял на некоторое время. Любые советы высоко ценится. СпасибоКак прокручивать в iOS, когда вид экрана больше, чем экран, когда появляется клавиатура?

Дополнительная информация: Я использую последнюю версию Xcode, разрабатывающую для iPhone версии 6.1 и выше. Я использовал построитель интерфейсов для настройки ScrollView и флажок AutoLayout.

+0

попробовать эту ссылку http://stackoverflow.com/questions/1126726/how-to-make-a-uitextfield-move-up-when-keyboard- is-present? rq = 1 – suhit

+0

Спасибо за ссылку, но я видел, что это уже и не повезло. –

ответ

2

в вашей точке зрения сделали нагрузку записи следующими строками

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide) name:UIKeyboardWillHideNotification object:nil]; 

Сделайте следующие методы.

-(void)keyboardDidHide 
{ 
    scrollview.frame = YOUR_ORIGINAL_FRAME;//You should set frame when keyboard is not there 
    scrollview.contentSize=scrollview.frame.size; 
} 
-(void)keyboardDidShow 
{ 
    CGRect r = scrollview.frame; 
    scrollview.contentSize=scrollview.frame.size; 
    r.size.height - = 216;//216 is keyboard height for iPhone. 
    scrollview.frame = r; 
} 
+0

Спасибо большое, это сработало отлично! –

+0

Добро пожаловать Не стесняйтесь задавать другие вопросы –

+0

Как я уже упоминал ранее, я новичок в разработке iOS, поэтому надеюсь, что это не глупый вопрос, но как мне получить такое же поведение прокрутки, когда iPhone изменится на пейзаж? Он отлично работает в портрете, но он не работает в ландшафте. –

0

Последующие 2 простых шага следующим образом

  1. От раскадровки/XIb отрегулируйте рамку для Scrollview и сохранить высоту, как размер экрана.

  2. В вашей ViewController применить contentsize для вашей точки зрения, как,

     <scrollview>.contentSize=CGSizeMake(320, 700); 
    

Вы сможете увидеть всю Scrollview прокрутку.

2
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

{ 
    /* this returns the keyboard when user click on return button which is reside on keyboard */ 

    if([text isEqualToString:@"\n"]) 
    { 
     [textView resignFirstResponder]; 
     [yourscrollview setContentOffset:CGPointMake(0,0)animated:YES]; 
    } 
    return YES; 
} 

-(void)textViewDidEndEditing:(UITextView *)textView 

{ 

/* it used for hide keyboard and set all control on their original position */ 

} 

-(void)textViewDidBeginEditing:(UITextView *)textView 

{ 

/* depending upon condition it will scroll the textview so textview can't reside behind the keyboard */ 

    [yourscrollview setContentOffset:CGPointMake(0,textView.center.y-80)animated:YES]; 

} 

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

0

Используйте следующую ссылку для перехода TextView или TextField вверх и вниз автоматически, когда клавиатура появляется

https://github.com/michaeltyson/TPKeyboardAvoiding

эта ссылка содержит демонстрационный проект. вы можете использовать это как требуется.

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

0

Вы могли бы сделать это следующим образом:

// In View First add keyboard appearance and disappearance Notifications 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow) name:UIKeyboardWillShowNotification object:nil]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide) name:UIKeyboardWillHideNotification object:nil]; 

// Now inside this selector method 
-(void)keyboardWillShow:(NSNotification *)notify 
{ 
    if (!notify) { 
     return; 
    } 

    NSDictionary *userInfo = [notify userInfo]; 

    NSValue *keyboardEndFrame = ([userInfo objectForKey:UIKeyboardFrameEndUserInfoKey]); 

    CGRect endFrame = keyboardEndFrame.CGRectValue; 

    // Change the frame of the view to its parent 
    CGRect loginViewFrame = [loginView.superview convertRect:loginView.frame fromView:loginView]; 

    // Check the keyboard covers the view 
    if (CGRectGetMinY(endFrame) < CGRectGetMaxY(loginViewFrame)) 
    { 
     // If YES calculate Distance. Save this difference to animate back the view 
     difference = CGRectGetMaxY(loginViewFrame)- CGRectGetMinY(endFrame); 

     // animate that View 
     [self animateViewUp:YES withMovementDistance:difference]; 
    } 
} 

// inside Will Hide 
-(void)keyboardWillHide 
{ 
    // Animate back the view with the calculated distance 
    [self animateViewUp:NO withMovementDistance:difference]; 
} 

- (void)animateViewUp:(BOOL)up withMovementDistance:(int)movementDistance 
{ 
    const float movementDuration = 0.3f; 

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

    [UIView animateWithDuration:movementDuration animations:^{ 
    loginView.frame = CGRectOffset(loginView.frame, 0, movement); 
    }]; 
} 
Смежные вопросы