2016-09-25 2 views
0

Ich habe eine Tabellenansicht mit Textansichten in jeder Zelle. Wie kann ich in der Tabellenansicht scrollen, damit der Text, der in die Textansicht einer Zelle eingegeben wird, immer sichtbar ist? Dies unterscheidet sich von einer Tabellenansicht mit Textfeldern, da ein Textfeld seine Höhe nicht ändert, während Textview dies tut, wenn eine neue Zeile eingegeben wird.Tastatur vermeiden Tabellenansicht mit Textansichten

Danke!

Antwort

0

Die UITextView ändert ihre Höhe jedes Mal, wenn die Rückmeldung gedrückt wird. Erkennen Sie, wenn der Rücklauf gedrückt wird, und scrollen Sie UITableView leicht nach oben.

- (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

Aber was, wenn der Benutzer nicht zurück drücken? Text wird einfach in die nächste Zeile gehüllt –

+0

@ BalázsVincze Überprüfen Sie diese http://stackoverflow.com/questions/20008713/detect-moment-when-newline-starts-in-uitextview – Kamil

0
  1. Deklarieren neue Variable UITextView * activeTextView;

  2. In der ViewDidLoad-Methode registrieren Sie die Tastaturbenachrichtigung beim Ein-/Ausblenden.

    [self keyboardNotifications]; 
    
  3. Fügen Sie die folgende Methode hinzu. - (void) {keyboardNotifications // Benachrichtigung registrieren, wenn die Tastatur zeigen sein wird [[NSNotificationCenter defaultCenter] addObserver: Selbst Selektor: @selector (keyboardWillShow :) Name: UIKeyboardWillShowNotification Objekt: nil];

    // Register notification when the keyboard will be hide 
        [[NSNotificationCenter defaultCenter] addObserver:self 
                  selector:@selector(keyboardWillHide:) 
                   name:UIKeyboardWillHideNotification 
                   object:nil]; 
    } 
    
  4. Set UITextView-Tag indexPath in cellForRowAtIndexPath.

    #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 delegieren activeTextView mit aktuellen UITextView eingestellt.

    #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]; 
    } 
    
Verwandte Themen