2010-08-21 6 views
8

Ich bin mit einem UINavigation bar ein popover in iPad anzeigt. Auf der zweiten Ansicht habe ich einen UISearchController, der eine Tastatur anzeigen kann. Die Tastatur drückt den popover auf, was in Ordnung ist, aber wenn ich die Schaltfläche ‚Zurück‘ auf der UINavigation Bar jetzt schieben die Tastatur entlässt was in Ordnung ist, aber die popover rutscht nicht wieder auf seine ursprüngliche Position. Wer weiß, wie man das repariert? Vielen Dank!UIPopoverController nicht in der ursprünglichen Position zu bewegen, nachdem Tastatur rutscht wieder nach unten

Antwort

9

Ok, damit ich herausgefunden tatsächlich (glaube ich), was Ihre Frage stellt ... und nur für den Fall jemand stolpert dies von Google, ich dachte, ich würde antworten, wie ich es tat. Es fühlt sich an wie ein Hack Job aber ich habe nicht zu tun, es kann eine andere Art und Weise finden.

In der Steuerung, die die Tastatur bringt, ich habe es eine Benachrichtigung hinterlassen hatte, wenn die Tastatur entlässt:

[aTextField resignFirstResponder]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil]; 

Dann zurück auf meinem Home-Bildschirm-Controller, der die UIPopover steuert, fügte ich einen Zuhörer:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(movePopUpToRightLocation) 
              name:@"movePopups" 
              object:nil];  

innerhalb der init. Achten Sie darauf, sich daran zu erinnern den Hörer in Ihrem dealloc für guten Programmierstil zu entfernen:

[[NSNotificationCenter defaultCenter] removeObserver:self]; 

Also dann, wenn ich Benachrichtigung, dass die Tastatur verschwindet, erhalte ich einen Verweis auf den Knopf, der die popover von auftaucht, und nur haben es wieder erscheinen direkt von ihm:

}

ich habe keine Kontrollen für die hinzugefügt popup es ist, aber ich kann einfach tun, wenn ich mehr als 1 Art von popover/

-(void)movePopUpToRightLocation { 
NSLog(@"move pop up to right location"); 
if (morePopUp) { 
    UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0]; 
    [morePopUp presentPopoverFromBarButtonItem:barButtonItem 
         permittedArrowDirections:UIPopoverArrowDirectionDown 
             animated:YES];    
} 
Knopf, von dem es erscheinen würde. Aber das ist die Grundvoraussetzung, von der Sie ausgehen können.

Hoffe es hilft!

+0

Dank im Querformat ist! Das ist hilfreich für jemanden, der mir sicher ist. – paranoidroid

1

Sie könnten auch für die UIKeyboardDidHideNotification irgendwo im initializer registrieren.

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil]; 

Dieser Code verschiebt den popover zurück:

- (void)movePopoverBack:(id)sender { 
    if ([self.settingsPopoverController isPopoverVisible]) { 
     [self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1]; 
     [self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5]; 
    } 
} 

- (void)hidePopover { 
    [self.settingsPopoverController dismissPopoverAnimated:YES]; 
} 

- (void)movePopoverBack { 
    [self.settingsPopoverController 
    presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton 
    permittedArrowDirections:UIPopoverArrowDirectionDown 
    animated:YES]; 
} 

ich es nicht ohne die Verzögerungen Arbeit bekommen haben, aber dies scheint für ein aktuelles Projekt akzeptabel. Hoffe es hilft jemandem.

0

Nachdem Sie die Zurück-Taste gedrückt haben, sollten Sie manuell resignFirstResponder für das Suchfeld aufrufen (zum Beispiel innerhalb viewDidDisappear).

Dies sollte helfen, aber das Problem noch unter iOS 4 wiedergegeben wird, wenn das Gerät mit HDer ome Taste auf der linken Seite