ボタンを含むビューを含むストーリーボードがあるとします。ユーザーがこのボタンを押すと、ポップオーバーが表示されます。
したがって、Xcode を使用してセグエをボタンにドラッグしてアンカーを設定する必要があります (そしてperformSegueWithIdentifier:を実行します)。
だから、私の質問は: この「アンカー」をプログラムで設定する方法はありますか?
ありがとうございました。
ボタンを含むビューを含むストーリーボードがあるとします。ユーザーがこのボタンを押すと、ポップオーバーが表示されます。
したがって、Xcode を使用してセグエをボタンにドラッグしてアンカーを設定する必要があります (そしてperformSegueWithIdentifier:を実行します)。
だから、私の質問は: この「アンカー」をプログラムで設定する方法はありますか?
ありがとうございました。
私の場合、プログラムでいくつかの 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 のフレームを変更しています。
それが役に立てば幸い。
ストーリーボードで、ポップオーバーを任意のボタンに固定します。どちらがコードでオーバーライドされるかについてはあまり心配しないでください。
ビュー コントローラ メソッドの prepareForSegue に、次のコードを追加します。
let dest = segue.destinationViewController
dest.popoverPresentationController?.barButtonItem = <your bar button here>
または、代わりにビューに固定したい場合
dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>
プログラムでBarButtonItemを作成していたときと同じ問題が発生しました。また、IBでアンカーとして設定できる、非表示の無効なボタンを作成することで、この問題を回避できる場合があります。
ここで説明されているように、プログラムでセグエを作成することはできません:プログラムでセグエを作成する、ただし、実行時に表示する宛先コントローラーを構成できます。これについては、こちらのアップルのドキュメントで説明されています:セグエがトリガーされたときの宛先コントローラーの構成。
うまくいけば、これが役に立ちます!