有没有办法以编程方式选择segue锚点?

时间:2012-02-26 04:58:03

标签: objective-c ios storyboard uistoryboardsegue

假设我有一个包含一个包含按钮的视图的Storyboard。当用户按下此按钮时,会出现一个弹出窗口。

因此,我需要通过使用Xcode将segue拖动到按钮来设置锚点(然后执行 performSegueWithIdentifier:)。

所以,我的问题是:有没有办法以编程方式设置这个“锚点”?

谢谢。

4 个答案:

答案 0 :(得分:14)

在我的情况下,我已经以编程方式添加了几个UIBarButtonItem。 仅使用不可见视图作为存档的问题是,如果像我的情况一样,UIBarButtonItem的大小正在改变它的大小,则弹出窗口的箭头不会出现居中,并且虽然它起作用,但看起来有点奇怪。 / p>

如何解决。

在故事板中创建一个小视图(大小并不重要),使其不可见,并链接它。 在我的例子中,这被称为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];
    }
}

正如你在它显示popover(使用performSegueWithIdentifier)之前所看到的,我正在改变框架 具有触发事件的按钮的值的Archor。

希望它有所帮助。

答案 1 :(得分:3)

在故事板中将popover锚定到某个任意按钮。不要过分担心哪一个会在代码中被覆盖。

在视图控制器方法prepareForSegue中,添加代码:

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

或者如果你想锚定到视图

dest.popoverPresentationController?.barButtonItem = nil
dest.popoverPresentationController?.sourceView = <your view here>

答案 2 :(得分:1)

您无法以编程方式创建segue,如此处所述:Creating a segue programmatically,但是,您可以配置要在运行时显示的目标控制器。这在苹果文档中有解释:Configuring the Destination Controller When a Segue is Triggered

希望这有帮助!

答案 3 :(得分:1)

我遇到了同样的问题,我以编程方式创建了一个BarButtonItem。您也可以通过创建一个隐藏的禁用按钮来解决它,您可以将其设置为IB中的锚点。