2017-11-20 24 views
0

userButtonPressed이 매개 변수로 UIButton과 함께 호출됩니다.<code>userUIBtn</code>이 클릭되면 UIBarButtonItem 내의 UIButton 주변에 팝업 표시가

그러나 은 대신 팝업 표시를 위해 UIBarButtonItem에 액세스하고 싶습니다.

사용자 탐색 버튼을 생성하는 generateToolbar() 방법입니다. 그것은 호출되지 않는 - 여기

-(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]; 

} 

사용자 버튼을 누름으로써 트리거하는 버튼 주위 팝 오버를 생성 도착 userButtonPressed() 방법이다. 내 솔루션은 두 곳에서 액션 핸들러를 편집했다

- (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; 

} 

답변

0

, 나는 UIButtonUIBarButtonItem에서 매개 변수를 변경하고 popController.sourceView = sender;popController.barButtonItem = sender;을 변경했습니다.

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