Frage

In mehreren Fällen ich eine Symbolleiste oben auf der iPhone-Tastatur hinzufügen möchten (wie in iPhone Safari, wenn Sie Formularelemente der Navigation, zum Beispiel).

Derzeit bin Angabe ich das Rechteck in der Symbolleiste mit Konstanten, sondern weil andere Elemente der Schnittstelle im Fluss sind - Symbolleisten und nav Balken am oberen Rand des Bildschirms - jedes Mal, wenn wir eine kleine Schnittstelle Änderung vornehmen, die Symbolleiste aus der Ausrichtung geht.

Gibt es eine Möglichkeit, um programmatisch die Position der Tastatur in Bezug auf die aktuelle Ansicht zu bestimmen?

War es hilfreich?

Lösung

Wie von iOS 3.2 gibt es eine neue Art und Weise diesen Effekt zu erzielen:

UITextFields und UITextViews haben eine inputAccessoryView Eigenschaft, die Sie zu jeder Ansicht einstellen, dass automatisch oben und mit der Tastatur animierte angezeigt wird.

Beachten Sie, dass die Ansicht, die Sie verwenden sollen, weder an anderer Stelle in der Ansichtshierarchie sein, noch sollten Sie es bis zu einem gewissen Superview hinzuzufügen, dies für Dich getan wird.

Andere Tipps

Also im Grunde:

In der init-Methode:

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

Und dann haben Methoden oben genannten, die Position der Stange einzustellen:

-(void) keyboardWillShow:(NSNotification *) note
{
    CGRect r  = bar.frame, t;
    [[note.userInfo valueForKey:UIKeyboardBoundsUserInfoKey] getValue: &t];
    r.origin.y -=  t.size.height;
    bar.frame = r;
}

Könnte es recht machen, indem die Positionsänderung Animieren indem sie sie in

Einwickeln
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
//...
    [UIView commitAnimations];

Dies basiert auf dem Antwort bestehende aus tonklon - ich bin nur ein Code-snippet hinzufügen, die auf der Oberseite der Tastatur einen halbtransparenten schwarzen Symbolleiste zeigt, zusammen mit einer Schaltfläche „fertig“ auf der rechten Seite:

UIToolbar *toolbar = [[[UIToolbar alloc] init] autorelease];
[toolbar setBarStyle:UIBarStyleBlackTranslucent];
[toolbar sizeToFit];

UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *doneButton =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(resignKeyboard)];

NSArray *itemsArray = [NSArray arrayWithObjects:flexButton, doneButton, nil];

[flexButton release];
[doneButton release];
[toolbar setItems:itemsArray];

[aTextField setInputAccessoryView:toolbar];

und die -resignKeyboard wie folgt aussieht:

-(void)resignKeyboard {
  [aTextField resignFirstResponder];
}

Hoffnung, dass jemand hilft.

Wenn Sie sich registrieren für Tastatur-Benachrichtigungen, dh UIKeyboardWillShowNotification UIKeyboardWillHideNotification, etc, die Benachrichtigung, die Sie erhalten die Grenzen der Tastatur im userInfo dict (UIKeyboardBoundsUserInfoKey) enthalten.

Sehen Sie die UIWindow Klassenreferenz.

3.0 und höher Sie die Animation Dauer und die Kurve aus dem userInfo Wörterbuch der Meldungen erhalten können.

zum Beispiel die Größe der Ansicht animieren Platz für die Tastatur zu machen, melden Sie sich für den UIKeyboardWillShowNotification und etwas tun, wie folgt aus:

- (void)keyboardWillShow:(NSNotification *)notification
{
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationCurve:[[[notification userInfo] objectForKey:UIKeyboardAnimationCurveUserInfoKey] intValue]];
    [UIView setAnimationDuration:[[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]];

    CGRect frame = self.view.frame;
    frame.size.height -= [[[notification userInfo] objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size.height;
    self.view.frame = frame;

    [UIView commitAnimations];
}

Starten Sie eine ähnliche Animation für UIKeyboardWillHideNotification.

Ich habe diesen Link sehr nützlich gefunden inputaccesoryview Schritt für Schritt zu verstehen.

Eingabezubehör Ansicht

Mit dieser Methode erstellen und es auf ViewWillLoad nennen:

        - (void) keyboardToolbarSetup
{
    if(self.keyboardToolbar==nil)
        {
        self.keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 44)];

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(anyAction)];

        UIBarButtonItem *extraSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

        UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(anyOtherAction)];


        NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:cancelButton,extraSpace,doneButton, nil];

        [self.keyboardToolbar setItems:toolbarButtons];

        self.myTextView.inputAccessoryView=self.keyboardToolbar;
        }
}

Es gibt keinen Weg (AFAIK), die Abmessungen der Tastatur Ansicht zu erhalten. Es ist jedoch konstant, zumindest in jeder iPhone-Version so weit.

Wenn Sie die Symbolleiste Position als ein von der Unterseite Ihrer Ansicht Offset berechnen, und nehmen Sie die Größe Ihrer Ansicht Rechnung zu tragen, dann sollten Sie nicht kümmern, ob ein navbar vorhanden ist oder nicht.

z.

#define KEYBOARD_HEIGHT 240 // example - can't remember the exact size
#define TOOLBAR_HEIGHT 30

toolBarRect.origin.y = viewRect.size.height - KEYBOARD_HEIGHT - TOOLBAR_HEIGHT;

// move toolbar either directly or with an animation

Statt eines definieren, könnte man leicht eine keyboardHeight Funktion erstellen, die die Größe auf der Grundlage zurückgibt, ob die Tastatur angezeigt wird, und diese Symbolleiste Positionierung in eine separate Funktion bewegen, die Ihr Layout reorganisiert.

Auch kann es davon ab, wo Sie diese Positionierung tun, wie es die Größe Ihrer Ansicht möglich ist, kann zwischen basiert auf Ihrem navbar Setup gezeigt geladen und wird ändern. Ich glaube, der beste Ort, um zu tun wäre es in viewWillAppear sein.

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