1

Ich weiß, dass dies alte Schule Frage ist - aber ich habe im Internet gesucht und gefunden Lösungen zu veraltet. Wie würde ich einen UIAlertcontroller als popOver (mit Pfeilrichtung nach oben) in einem barButton implementieren. Hier ist der Code:Wie UIAlertcontroller als PopOver (mit Pfeilrichtung nach oben) in einem UIBarbutton implementieren

- (IBAction)eventSortingAction:(UIBarButtonItem *)sender { 

UIAlertController * view= [UIAlertController 
         alertControllerWithTitle:@"My Title" 
         message:@"Select you Choice" 
         preferredStyle:UIAlertControllerStyleActionSheet]; 

UIAlertAction* ok = [UIAlertAction 
       actionWithTitle:@"OK" 
       style:UIAlertActionStyleDefault 
       handler:^(UIAlertAction * action) { 
        //Do some thing here 
        [view dismissViewControllerAnimated:YES completion:nil]; 

       }]; 
UIAlertAction* cancel = [UIAlertAction 
        actionWithTitle:@"Cancel" 
        style:UIAlertActionStyleCancel 
        handler:^(UIAlertAction * action) { 
         [view dismissViewControllerAnimated:YES completion:nil]; 

        }]; 
[view addAction:ok]; 
[view addAction:cancel]; 
[view setModalPresentationStyle:UIModalPresentationPopover]; 
view.modalInPopover = YES; 
view.popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirectionUp; 
view.popoverPresentationController.delegate = self; 
[self presentViewController:view animated:YES completion:nil]; 

UIView* senderView = [sender valueForKey:@"view"]; //HACK 
UIPopoverPresentationController* popover = view.popoverPresentationController; 
if (popover) { 
    popover.sourceView = senderView; 
    popover.sourceRect = senderView.bounds; 
    popover.permittedArrowDirections = UIPopoverArrowDirectionUp; 
    popover.barButtonItem = self.actionBarButton; 
    popover.delegate = self; 
}} 

anscheinend bekam ich immer eine "popover = nil". Bitte Hilfe! Danke im Voraus!

Übrigens ist dieser Code nicht meins, nur testet es in Xcode.

+0

Aktualisieren Sie Ihre Frage mit dem Code, der tatsächlich den 'UIAlertController' erstellt. Und erklären Sie, was tatsächlich mit dem Code passiert, den Sie gepostet haben, im Gegensatz zu dem, was Sie tun möchten. – rmaddy

+0

Hallo rmaddy, ich habe die aktualisierte Frage unten veröffentlicht. Ich kann meine Frage nicht bearbeiten - mir fehlt noch Reputation. – macky12345

+0

Sicher können Sie bearbeiten. Klicken Sie auf den Link zum Bearbeiten unter Ihrer Frage. Schreibe keine Antwort. – rmaddy

Antwort

0
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil 
                     message:nil 
                    preferredStyle:UIAlertControllerStyleActionSheet]; 

UIAlertAction *actnCamera = [UIAlertAction actionWithTitle:@"Camera" style:UIAlertActionStyleDefault 
                handler:^(UIAlertAction * action) { 
                }]; 

UIAlertAction *actnLibrary = [UIAlertAction actionWithTitle:@"Library" style:UIAlertActionStyleDefault 
                handler:^(UIAlertAction * action) { 
                }]; 

[alertController addAction:actnLibrary]; 
[alertController addAction:actnCamera]; 
[alertController setModalPresentationStyle:UIModalPresentationPopover]; 
UIPopoverPresentationController *popPresenter = [alertController 
               popoverPresentationController]; 
popPresenter.sourceView = self.view; 
CGRect frame = self.navigationController.navigationBar.frame; 
frame.origin.x = self.navigationItem.leftBarButtonItem.width; 
popPresenter.sourceRect = frame; 
popPresenter.barButtonItem = self.navigationItem.leftBarButtonItem; 
[self presentViewController:alertController animated:YES completion:nil]; 

OUTPUT

enter image description here

+0

Hallo PKT es funktioniert nicht, es zeigt nur den Alarmcontroller, wenn ich auf den Uibarbutton geklickt habe. Was ich tun wollte, ist, dass, wenn ich auf den Uibarbutton klicke, so etwas wie http://stackoverflow.com/questions/25805608/present-a-uialertcontroller-from-within-a-popover-in-ios8 – macky12345

+0

@ macky12345 siehe bearbeiten –

+0

Im im iPhone simulieren und immer noch kann ich das nicht implementieren. Kann das nur im iPad gemacht werden? Oder ich bin einfach falsch bei der Umsetzung. Ich habe Ihren Code kopiert und eingefügt. – macky12345

2

Nur erinnerte denn dies ist ein Top-Ergebnis auf Google ist:

popPresenter.barButtonItem ist eine Alternative zu popPresenter.sourceView + popPresenter.sourceRect

See(source)

In Bezug auf OP Frage, IBAction Parameter sender sollte verwendet werden.

UIPopoverPresentationController *popPresenter = [alertController 
              popoverPresentationController]; 
popPresenter.barButtonItem = sender; 
[self presentViewController:alertController animated:YES completion:nil];