2016-09-25 9 views
0

私は、各セルにテキストビューを持つテーブルビューを持っています。セルのテキストビューに入力されたテキストが常に表示されるように、テーブルビューをスクロールするにはどうすればよいですか?これは、テキストフィールドのテーブルビューとは異なります。なぜなら、新しい行が入力された場合、テキストフィールドはその高さを変更せず、textviewは変更しないからです。キーボードのtextviewsによるテーブルビューの回避

ありがとうございます!

答えて

0

UITextViewは、戻りを押すたびに高さが変更されます。リターンが押されたときに検出し、UITableViewを少し上にスクロールします。

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

    if([text isEqualToString:@"\n"]) { 

     CGPoint currentOffset=myTableView.contentOffset; 
     currentOffset.y-=10; 
     [myTableview setContentOffset:currentOffset]; 

    } 

    return YES; 
} 
+0

しかし、どのような場合、ユーザがリターンキーを押していないのですか?テキストは単に次の行にラップされます –

+0

@BalázsVinczeこれをチェックしてくださいhttp://stackoverflow.com/questions/20008713/detect-moment-when-newline-starts-in-uitextview – Kamil

0
  1. 新しい変数 UITextView * activeTextViewを宣言します。

  2. ViewDidLoadメソッドでは、show/hideの間にキーボード通知を登録します。

    [self keyboardNotifications]; 
    
  3. 以下の方法を追加します。 - (ボイド)keyboardNotifications { //キーボードが表示されるときに通知を登録 [NSNotificationCenter defaultCenter] addObserver:自己 セレクタ:@selector(keyboardWillShow :) 名:UIKeyboardWillShowNotification オブジェクト:なし]。

    // Register notification when the keyboard will be hide 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(keyboardWillHide:) 
                   name:UIKeyboardWillHideNotification 
                   object:nil]; 
    } 
    
  4. cellForRowAtIndexPathのindexpathを使用してUITextviewタグを設定します。現在UITextViewでactiveTextViewとして設定

    #pragma mark - Keyboard handling 
    -(void) keyboardWillShow:(NSNotification *)note { 
        if(activeTextView) 
         if ([TableCell count] < activeTextView.tag) { // It is validate table cell count and activeTextView.tag 
          NSDictionary* info = [note userInfo]; 
          CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size; 
    
          UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); 
          tableV.contentInset = contentInsets; 
          tableV.scrollIndicatorInsets = contentInsets; 
          [tableV scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:activeTextView.tag inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:YES]; 
         } 
        } 
    
    } 
    
    -(void) keyboardWillHide:(NSNotification *)note { 
        [UIView animateWithDuration:.3 animations:^(void) { 
         tableV.contentInset = UIEdgeInsetsZero; 
         tableV.scrollIndicatorInsets = UIEdgeInsetsZero; 
        }]; 
    } 
    
  5. UITextViewデリゲート。

    #pragma mark - UITextViewDelegate :: 
    
    - (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
    { 
        return YES; 
    } 
    
    - (BOOL)textViewShouldEndEditing:(UITextView *)textView 
    { 
        return YES; 
    } 
    
    // To be link with your TextView event "Editing Did Begin" 
    // memoryze the current TextView 
    - (void)textViewDidBeginEditing:(UITextView *)textView 
    { 
        activeTextView = textView; 
        [textView becomeFirstResponder]; 
    } 
    
    // To be link with your TextView event "Editing Did End" 
    // release current TextView 
    - (void)textViewDidEndEditing:(UITextView *)textView 
    { 
        activeTextView = nil; 
        [textView resignFirstResponder]; 
    } 
    
関連する問題