2

次のようUIPopoverControllerに をクリックすると、を作成してView Controllerに追加しましたUIButton

- (void)viewDidLoad
{
    [super viewDidLoad];
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
}

- (IBAction)showPopover:(UIButton *)sender
{
    if ([popoverController isPopoverVisible]) {
        [popoverController dismissPopoverAnimated:YES];
    } else {
               CGRect popRect = CGRectMake(self.btnShowPopover.frame.origin.x,
                                self.btnShowPopover.frame.origin.y,
                                self.btnShowPopover.frame.size.width,
                                self.btnShowPopover.frame.size.height);
          [popoverController presentPopoverFromRect:popRect
                                       inView:self.view
                     permittedArrowDirections:UIPopoverArrowDirectionAny
                                     animated:YES];
    }
}

btnShowPopoverUIButtonviewcontrollerpopoverControllerですUIPopoverController

ボタンをクリックすると、popovercontroller正常に表示されます。

しかしUIButtonsecondviewcontroller

そのために次のコードを使用しました

-(IBAction)y:(id)sender{
    fs =  [[Firstviewcontroller alloc] initWithNibName:@"FIrstscreen" bundle:[NSBundle mainBundle]];
    [fs.popoverController dismissPopoverAnimated:TRUE];
}

しかし、うまくいきませんでした。

popovercontrollerに追加されたviewcontollerのボタンをクリックしたときに閉じる方法はpopovercontroller?

4

2 に答える 2

9

の新しいインスタンスを割り当てているFirstviewcontrollerため、前のインスタンスのポップオーバーは閉じられません。

次のようにポップオーバーを表示するときは、古いインスタンスを渡す必要があります。

- (void)viewDidLoad
{
    [super viewDidLoad];
    controller = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:[NSBundle mainBundle]];
    popoverController = [[UIPopoverController alloc] initWithContentViewController:controller];
    [controller setFs:self]
}

そして次のように却下します:

-(IBAction)y:(id)sender
{
    [fs.popoverController dismissPopoverAnimated:TRUE];
}
于 2013-01-14T11:08:59.527 に答える
4

アップルのドキュメント:

ポップオーバー コントローラーは、メソッドへのプログラム呼び出しに応答して、このメソッドを呼び出しませんdismissPopoverAnimated:。プログラムでポップオーバーを閉じる場合は、dismissPopoverAnimated: メソッドを呼び出した直後にクリーンアップ アクションを実行する必要があります。

したがって、didDimissデリゲートのメソッドはそれ自体では呼び出されません。

試す:

[self.popover dismissPopoverAnimated:YES];
[self.popover.delegate popoverControllerDidDismissPopover:self.PopUp];
于 2013-01-14T11:08:46.487 に答える