3 Stimmen

iPhone - Wie kann ich ein UITextField scrollen und die Größe einer UITextView ändern, wenn ein Keybord erscheint

Ich habe ein UIScrollView, in dem ich ein UITextField und ein UITextView habe. Ich möchte verhindern, dass die Tastatur das Feld ausblendet, an dem wir gerade arbeiten. Wenn der Benutzer auf das TextField tippt, soll es an den oberen Rand des Bildschirms gescrollt werden. Wenn der Benutzer auf die TextView tippt, soll sie die Größe an den leeren Platz links oben auf der Tastatur anpassen. Meine Tastatur hat eine zusätzliche Ansicht (eine Symbolleiste).

Im Moment fange ich die UIKeyboardWillShowNotification-Benachrichtigung ab, und ich verwende diesen Code, der nicht wirklich funktioniert (die Textansicht wird in der Größe verändert, befindet sich aber immer noch hinter der Tastatur): Dieser Code funktionierte gut, wenn ich nicht die UIScrollView hatte.

- (void)keyboardWillShow:(NSNotification *)notification {

    if ([self.noteView isFirstResponder] == NO) return;

    /*
     Reduce the size of the text view so that it's not obscured by the keyboard.
     Animate the resize so that it's in sync with the appearance of the keyboard.
     */

    NSDictionary *userInfo = [notification userInfo];
    NSValue* aValue = [userInfo objectForKey:UIKeyboardFrameEndUserInfoKey];                            // Get the origin of the keyboard when it's displayed.
    NSValue *animationDurationValue = [userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey];   // Get the duration of the animation.

    // Get the top of the keyboard as the y coordinate of its origin in self's view's coordinate system. The bottom of the text view's frame should align with the top of the keyboard's final position.
    CGRect keyboardRect = [aValue CGRectValue];
    keyboardRect = [self.view convertRect:keyboardRect fromView:nil];

    CGFloat keyboardTop = keyboardRect.origin.y;
    CGRect newTextViewFrame = self.view.bounds;
    newTextViewFrame.size.height = keyboardTop - self.view.frame.origin.y; // Using bounds here does not help

    NSTimeInterval animationDuration;
    [animationDurationValue getValue:&animationDuration];

    // Animate the resize of the text view's frame in sync with the keyboard's appearance.
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];

     self.noteView.frame = newTextViewFrame;

    [UIView commitAnimations];
}

Könnten Sie mir also helfen, :

  • dies auch für die Textansicht zu ermöglichen?

  • die Textansicht wieder in ihre ursprüngliche Position zurückbringen?

  • Wie kann ich das TextFeld ohne Größenänderung scrollen?

Dankeschön

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X