Ich habe ein UIBarButtonItem, das ein Aktionsblatt öffnet, um Benutzern Auswahlmöglichkeiten zu bieten. Alles funktioniert wie erwartet, es sei denn, ich versuche auf die Schaltfläche "Abbrechen" zu klicken. Das Ziel der Schaltfläche scheint sich von der Stelle nach oben bewegt zu haben, an der es sein sollte. Ich kann es nur aktivieren, indem ich irgendwo in der Mitte der Schaltflächen "Abbrechen" und "OK" klicke.
Ich habe Aktionsblätter in anderen Anwendungen ausprobiert und sie funktionieren einwandfrei, es ist also nicht nur mein großer Daumen. Das Aktionsblatt wird in einem UIViewController geöffnet
- (void)showOpenOptions
{
UIActionSheet *sheet = [[UIActionSheet alloc]
initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
delegate:self
cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
otherButtonTitles:nil];
[sheet showInView:self.view];
[sheet release];
}
ios
objective-c
iphone
cocoa-touch
uiactionsheet
Nevan König
quelle
quelle
Antworten:
Verwenden Sie die
showFromTabBar:
Methode von, anstatt die Ansicht des aktuellen Ansichtscontrollers an das Aktionsblatt zu übergebenUIActionSheet
.Der richtige Weg
Dies ergibt den richtigen tippbaren Bereich:
Der falsche Weg
Dadurch wird der tippbare Bereich an der falschen Stelle platziert (wenn Sie eine Registerkarten- oder Symbolleiste verwenden):
Wenn Sie eine Symbolleiste verwenden , verwenden Sie
showFromToolbar:
stattdessen die Methode. Sie benötigen einen Verweis auf die Symbolleiste, höchstwahrscheinlich einen IvarMeine alte Antwort funktioniert auch, ist aber hacky:
Habe gerade eine mögliche Antwort gefunden:
http://openradar.appspot.com/6410780
Bearbeiten: Es funktioniert korrekt, wenn ich die Ansicht in die Ansicht der Registerkartenleiste ändere
quelle
Ich habe hier eine Antwort gefunden , die funktioniert.
mit :
[filterActionSheet showInView:[self.view window]]
;Ich habe ein paar Möglichkeiten ausprobiert, um zu meiner Registerkartenleiste zu gelangen, und die Art und Weise, wie diese App eingerichtet ist, scheint kompliziert zu sein ...
quelle
Verwenden Sie stattdessen:
quelle
showInTabBar:
bis korrigiertshowFromTabBar:
. Beachten Sie auch, dass es eine 'showFromToolbar:' - Methode gibt, je nachdem, welche Bildschirmmöbel Sie am unteren Bildschirmrand haben. Ich denke, dies ist eine bessere Antwort als die akzeptierte Antwort.Hier ist das Update. Versuchen Sie Folgendes:
quelle
Ich denke, eine Kombination aus drei der Antworten ist der richtige Weg, um damit umzugehen:
Verwenden Sie also showFromTabBar (deshalb gibt es ihn), und Sie benötigen den parentViewController nicht, wie Nathan betont hat (tatsächlich gibt self.parentViewController.tabBarController.tabBar für mich null zurück.
quelle
Zu Ihrer Information - hatte das gleiche Problem mit dem Aktionsblatt von UIDocumentInteractionController, das auf die Registerkartenleiste trat. Zum Beheben wurde Folgendes verwendet.
quelle
Schreiben Sie einfachen Code
das funktioniert gut
quelle