15

ボタンを含むビューを含むストーリーボードがあるとします。ユーザーがこのボタンを押すと、ポップオーバーが表示されます。

したがって、Xcode を使用してセグエをボタンにドラッグしてアンカーを設定する必要があります (そしてperformSegueWithIdentifier:を実行します)。

だから、私の質問は: この「アンカー」をプログラムで設定する方法はありますか?

ありがとうございました。

4

4 に答える 4

14

私の場合、プログラムでいくつかの UIBarButtonItem を追加しました。非表示のビューのみをアーチャーとして使用する場合の問題は、私の場合のように、UIBarButtonItem のサイズがサイズを変更している場合、ポップオーバーの矢印が中央に表示されず、機能していても少し奇妙に見えることです。

それを解決する方法。

ストーリーボードに小さなビューを作成し (サイズはそれほど重要ではありません)、非表示にしてリンクします。私の場合、これは invisibleViewAsArchor と呼ばれます

UIBarbutton アイテムを次のアクションに接続します。

-(IBAction) showMyPopover:(id)sender {
    if([self.popoverController isPopoverVisible])
    {       
        [self.popoverController dismissPopoverAnimated:YES];
    }else{
        self.invisibleViewAsArchor.frame = CGRectMake([sender view].frame.origin.x,
                                                          [sender view].frame.origin.y-50,
                                                          [sender view].frame.size.width,
                                                          [sender view].frame.size.height);

        [self performSegueWithIdentifier:@"segue_to_something" sender:self];
    }
}

ポップオーバーが (performSegueWithIdentifier で) 表示される前にわかるように、イベントを発生させたボタンの値を使用して Archor のフレームを変更しています。

それが役に立てば幸い。

于 2013-01-12T01:42:21.163 に答える
6

ストーリーボードで、ポップオーバーを任意のボタンに固定します。どちらがコードでオーバーライドされるかについてはあまり心配しないでください。

ビュー コントローラ メソッドの prepareForSegue に、次のコードを追加します。

let dest = segue.destinationViewController
dest.popoverPresentationController?.barButtonItem = <your bar button here>

または、代わりにビューに固定したい場合

dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>
于 2016-08-04T22:59:42.840 に答える
1

プログラムでBarButtonItemを作成していたときと同じ問題が発生しました。また、IBでアンカーとして設定できる、非表示の無効なボタンを作成することで、この問題を回避できる場合があります。

于 2012-09-08T16:07:21.033 に答える
1

ここで説明されているように、プログラムでセグエを作成することはできません:プログラムでセグエを作成する、ただし、実行時に表示する宛先コントローラーを構成できます。これについては、こちらのアップルのドキュメントで説明されています:セグエがトリガーされたときの宛先コントローラーの構成

うまくいけば、これが役に立ちます!

于 2012-04-30T18:59:24.530 に答える