2017-11-20 3 views
0

userButtonPressed wird mit dem UIButton als Parameter aufgerufen, wenn der userUIBtn geklickt wird.Ein Popover um ein UIButton in UIBarButtonItem anzeigen

Allerdings möchte ich stattdessen auf die UIBarButtonItem zugreifen, um ein Popover herum anzuzeigen.

Hier ist die generateToolbar() Methode, die Benutzer Navigationsschaltfläche generiert.

-(void) generateToolbar { 

    // Initialize the `ButtonFactory` 

    ButtonFactory *buttonFactory = [[ButtonFactory alloc] init]; 

    // Generate some `UIButton(s)` 

    UIButton *userUIBtn = [buttonFactory createButtonWithButtonType:ButtonTypeUser]; 
    userUIBtn.frame = CGRectMake(0,0,55,20); 

    // Add an action to the `UIButton`   

    [userUIBtn addTarget:self action:@selector(userButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 

    // Generate an `UIBarButtonItem` with the `UIButton` as basis view 

    UIBarButtonItem *userBtn = [[UIBarButtonItem alloc] initWithCustomView:userUIBtn]; 

    // Add the `UIBarButtonItem` into the right side of the `navigationItem` 

    self.navigationItem.rightBarButtonItems = [[NSArray alloc] initWithObjects: userBtn, nil]; 

} 

Hier ist die userButtonPressed() Methode, die durch Drücken der Benutzer Taste und erzeugt eine popover um diese Taste ausgelöst wird - es wird nicht genannt.

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

    // Initialize the `ButtonFactory` 
    ButtonFactory *buttonFactory = [[ButtonFactory alloc] init]; 

    // Generate some `UIButton(s)` 
    UIButton *feedbackUIBtn = [buttonFactory createButtonWithButtonType:ButtonTypeFeedback iconVisibility:YES textVisibility:YES capitalization:NO iconSize:20.0 textSize:20.0]; 
    [feedbackUIBtn addTarget:self action:@selector(feedbackBtnClicked:) forControlEvents:UIControlEventTouchUpInside]; 
    feedbackUIBtn.frame = CGRectMake(0,50,300,50); 

    // Create a `UIViewController` and add the `UIButtons` as subviews 
    UIViewController *viewController = [[UIViewController alloc] init]; 
    [viewController.view addSubview:feedbackUIBtn]; 

    // Present the `UIViewController` 
    viewController.modalPresentationStyle = UIModalPresentationPopover; 
    [self presentViewController:viewController animated:YES completion:nil]; 

    // Set up the `UIPopoverPresentationController` 
    UIPopoverPresentationController *popController = [viewController popoverPresentationController]; 
    popController.permittedArrowDirections = UIPopoverArrowDirectionUp; 
    popController.barButtonItem = sender; 

} 

Antwort

0

Meine Lösung des Action-Handler an zwei Stellen zu bearbeiten war, änderte ich den Parameter UIBarButtonItem-UIButton und geändert popController.barButtonItem = sender; zu popController.sourceView = sender;.

- (IBAction) userButtonPressed:(UIButton*)sender { 
    ... 
    popController.sourceView = sender; 
    ... 
} 
Verwandte Themen