【发布时间】:2012-03-16 01:53:14
【问题描述】:
假设我有一个 Storyboard,其中包含一个包含按钮的视图。当用户按下此按钮时,会弹出一个弹出框。
因此,我需要通过使用 Xcode 将 segue 拖到按钮上来设置锚点(然后执行 performSegueWithIdentifier:)。
所以,我的问题是:有没有办法以编程方式设置这个“锚点”?
谢谢。
【问题讨论】:
标签: objective-c ios storyboard uistoryboardsegue
假设我有一个 Storyboard,其中包含一个包含按钮的视图。当用户按下此按钮时,会弹出一个弹出框。
因此,我需要通过使用 Xcode 将 segue 拖到按钮上来设置锚点(然后执行 performSegueWithIdentifier:)。
所以,我的问题是:有没有办法以编程方式设置这个“锚点”?
谢谢。
【问题讨论】:
标签: objective-c ios storyboard uistoryboardsegue
在我的例子中,我以编程方式添加了几个 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>
【讨论】:
您无法按照此处的说明以编程方式创建 segue:Creating a segue programmatically,但是,您可以配置要在运行时显示的目标控制器。这在此处的苹果文档中进行了解释:Configuring the Destination Controller When a Segue is Triggered。
希望这会有所帮助!
【讨论】:
我在以编程方式创建 BarButtonItem 时遇到了同样的问题。您也可以通过创建一个不可见的禁用按钮来绕过它,您可以将其设置为 IB 中的锚点。
【讨论】: