Einstellen Schnittstelle, wenn Tastatur erscheint für UITextField oder UITextView

StackOverflow https://stackoverflow.com/questions/402658

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine Tabelle mit jeder Zelle eine Beschriftung und ein Textfeld enthält. Das Problem ist, dass, wenn ich gehe, um die letzte Zeile zu bearbeiten, Tastatur, um den unteren Teil der Tabelle versteckt, und ich kann nicht sehen, was eingegeben wird. Wie kann ich meine Schnittstelle über der Tastatur bewegen, so kann ich sehen, was eingegeben wird?

Danke, Mustafa

War es hilfreich?

Lösung

Sie wollen Ihre Viewcontroller für UIKeyboardDidShowNotification und UIKeyboardWillHideNotification Ereignisse registrieren. Wenn Sie diese erhalten, sollten Sie die Grenzen Ihrer Tabelle anpassen; die Tastatur 170 Pixel Höhe, so dass nur Ihre Tabelle Grenzen angemessen schrumpfen oder wachsen, und es sollte auf die Tastatur richtig einzustellen.

Andere Tipps

Dieses Problem ist komplex abhängig von Ihrem UI-Szenario. Hier beschreibe ich ein Szenario, das in dem UITextField oder UITextView befindet sich in einem UITableViewCell.

  1. Sie müssen NSNotificationCenter verwenden UIKeyboardDidShowNotification Ereignis zu erfassen. finden Sie unter http://iosdevelopertips.com/user-interface/adjust -textfield-versteckt-by-keyboard.html . Sie müssen die UITableView Rahmengröße schrumpfen, so dass es nur den Bildschirmbereich einnimmt, die nicht von der Tastatur abgedeckt ist.

    1. Wenn Sie ein UITableViewCell tippen, wird das Betriebssystem automatisch die Zelle im Sichtbereich von UITableView positionieren. Aber es geschieht nicht, wenn Sie eine UITextView oder UITableViewCell tippen, obwohl es in einem UITableViewCell befindet.

Sie müssen rufen

[myTableView selectRowAtIndexPath:self.indexPath animated:YES scrollPosition:UITableViewScrollPositionBottom];` 

„tippen“, um die Zelle programmatisch.

Wenn Sie beiden Punkte implementieren, werden Sie die UITextView / Feldposition siehe rechts oberhalb der Tastatur. Bare daran, dass die UITableViewCell, wo die UITableView / Feld wohnt nicht größer sein kann als die „nicht abgedeckt“ -Bereich. Wenn dies für Sie nicht der Fall ist, gibt es einen anderen Ansatz für sie, aber ich werde hier nicht diskutieren.

So stellen Sie sicher, dass Sie genug Scrollen Raum unterhalb haben. Denn nach meinem Wissen automatisch das iPhone paßt und zeigt den fokussierten Textbox zum Zeitpunkt seiner Tastatur erscheint.

Entfernen / Kommentierung der Zeilen, in denen die rect Höhe geändert wird scheint das Problem zu lösen. Danke.

Modifizierte Code:

# define kOFFSET_FOR_KEYBOARD 150.0     // keyboard is 150 pixels height

// Animate the entire view up or down, to prevent the keyboard from covering the author field.
- (void)setViewMovedUp:(BOOL)movedUp
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];

// Make changes to the view's frame inside the animation block. They will be animated instead
// of taking place immediately.
CGRect rect = self.view.frame;
CGRect textViewRect = self.textViewBeingEdited.frame;
CGRect headerViewRect = self.headerView.frame;

if (movedUp) {
    // If moving up, not only decrease the origin but increase the height so the view 
    // covers the entire screen behind the keyboard.
    rect.origin.y -= kOFFSET_FOR_KEYBOARD;
    // rect.size.height += kOFFSET_FOR_KEYBOARD;
} else {
    // If moving down, not only increase the origin but decrease the height.
    rect.origin.y += kOFFSET_FOR_KEYBOARD;
    // rect.size.height -= kOFFSET_FOR_KEYBOARD;
}

self.view.frame = rect;
[UIView commitAnimations];

}

     [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWasShown:)
                                                     name:UIKeyboardDidShowNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWasHidden:)
                                                     name:UIKeyboardDidHideNotification
                                                   object:nil];
        keyboardVisible = NO;

- (void)keyboardWasShown:(NSNotification *)aNotification {
    if ( keyboardVisible )
        return;

    if( activeTextField != MoneyCollected)
    {
        NSDictionary *info = [aNotification userInfo];
        NSValue *aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
        CGSize keyboardSize = [aValue CGRectValue].size;

        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y -= keyboardSize.height-300;
        frame.size.height += keyboardSize.height-50;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];

        viewMoved = YES;
    }

    keyboardVisible = YES;
}

- (void)keyboardWasHidden:(NSNotification *)aNotification {
    if ( viewMoved ) 
    {
        NSDictionary *info = [aNotification userInfo];
        NSValue *aValue = [info objectForKey:UIKeyboardBoundsUserInfoKey];
        CGSize keyboardSize = [aValue CGRectValue].size;

        NSTimeInterval animationDuration = 0.300000011920929;
        CGRect frame = self.view.frame;
        frame.origin.y += keyboardSize.height-300;
        frame.size.height -= keyboardSize.height-50;
        [UIView beginAnimations:@"ResizeForKeyboard" context:nil];
        [UIView setAnimationDuration:animationDuration];
        self.view.frame = frame;
        [UIView commitAnimations];

        viewMoved = NO;
    }

    keyboardVisible = NO;
}
tabelview.contentInset =  UIEdgeInsetsMake(0, 0, 210, 0);
[tableview scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:your_indexnumber inSection:Your_section]
                 atScrollPosition:UITableViewScrollPositionMiddle animated:NO];

versuchen, diese meine Codierung dies für u helfen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top