2012-04-07 12 views
2

In Ansicht A habe ich ein Textfeld. Ich tippe auf ein Steuerelement, um einen neuen Ansichtscontroller B einzublenden. Ansicht B verfügt nur über eine Textansicht, deren Rahmen an die Tastatur angepasst werden sollte. Ich setze immer die Textansicht als Erstanwender und die Tastatur sollte sofort beim Anzeigen angezeigt werden B wird eingedrückt.So ändern Sie die Ansicht entsprechend der Tastatur show/hide, wenn die Tastatur bereits angezeigt wird

Ich mache die übliche Tastaturbenachrichtigungsverarbeitung in Ansichtscontroller B. Wenn also die Tastatur nicht angezeigt wird, bevor Ansicht B gedrückt wird, gibt es kein Problem. Wenn jedoch das Textfeld in Ansicht A der erste Responder ist und die Tastatur bereits angezeigt wird, wenn ich den Controller B anschließe, erhalte ich kein UIKeyboardWillShowNotification/UIKeyboardDidShowNotification. Irgendwelche Vorschläge, um mit dieser Situation umzugehen?

+1

Ist es eine Ipad App? Und ist es eine SeiteSheet Stil anzeigen? – tangqiaoboy

+0

Warum versuchst du nicht, UITextfieldDelegate oder UITextViewDelegate kann Ihnen helfen. – Leena

Antwort

0

Um Ersthelfer abzutreten dann wieder Ersthelfer zu werden ist keine gute Lösung, die ich sofort beim ersten Mal fallen gelassen habe, als ich darüber nachdachte. Die Tastatur zu drücken, um sich sofort wieder zu verstecken und wieder aufzutauchen, wenn die Tastatur schon da ist, ist einfach nicht das Richtige - es ist eine Verschwendung und bricht den fließenden Übergang.

Das Senden des Tastaturstatus von Ansicht A an B durch Aufbrechen der Kapselung von B ist in der Softwareentwicklung nicht akzeptabel.

Also ich glaube, es verdient einen Fehlerbericht und ich habe einen - #11205521.

1

Ich habe dieses Problem nicht zuvor, aber ich habe einen Vorschlag. Vielleicht in Ansicht B, können Sie Ihre TextView resignFirstResponder und dann becomeFirstResponder zwingen, die Tastaturbenachrichtigung zu erzwingen. Beispiel unten:

[textView resignFirstResponder]; 
[textView becomeFirstResponder]; 

Und es gibt einen anderen Weg um Weg, vielleicht können Sie resignFirstResponder in Ansicht A vor drücken, und dann becomeFirstResponder nach Ansicht B ist viewDidAppear.

Ich hoffe, es hilft.

0

Sie können die Statusinformationen an ViewController B übergeben ... Dies ist kein guter Weg, aber ich habe einige andere Methoden wie Aufruf [textView resitFirstResponder] in viewWillDisappear von viewController A versucht, alle nicht Arbeit.

0

Sie sollten versuchen UITouch.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    // Detect touch anywhere 
    UITouch *touch = [touches anyObject]; 

    // Get the point that was touched 
    CGPoint point = [touch locationInView:self.view]; 
    NSLog(@"pointx: %f pointy:%f", point.x, point.y); 

    // Check if the point touched is within these rectangular bounds 
    if (CGRectContainsPoint(CGRectMake(5, 5, 40, 130), point)) 
    { 
    //do something... 
    } 
} 
0

Hallo die Ansicht entsprechend der Tastatur, um die Größe verwende ich so etwas wie dieses

- (void) animateView: (BOOL) up 
{ 
    CGRect rect = self.view.frame; 

    if(up) 
    { 
     float movement = (up ? 264 : 416); 
     rect.size.height = movement; 
     self.view.frame = rect; 
    } 
    else 
    { 
     rect.size.height = 480; 
     self.view.frame = rect; 
    } 
} 

die BOOL Variable aufgebraucht wird, um anzuzeigen, wenn die Tastatur zeigte oder nicht

hoffe, das hilft !

Grüßen, Jorge

0

Sie könnten den Tastaturstatus in einem zentralen Platz in der App, wie der AppDelegate, überwachen und haben alle Komponenten die aktuelle Tastatur Informationen von ihm zu bekommen.

Verwandte Themen