【问题标题】:Is there a way to select a segue anchor programmatically?有没有办法以编程方式选择 segue 锚?
【发布时间】:2012-03-16 01:53:14
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: objective-c ios storyboard uistoryboardsegue


    【解决方案1】:

    在我的例子中,我以编程方式添加了几个 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 的值与触发事件的按钮的值。

    希望对你有帮助。

    【讨论】:

    • 嗨@GUiLTY,所以我遇到了同样的问题。想知道“invisibleViewAsArchor”是否是我需要为该视图创建的类?
    • 嗨@gdubs "invisibleViewAsAnchor" 是一个标准视图和内部 - (void)viewDidLoad{ // 在你的代码之后 ... self.invisibleViewAsArchor.hidden=TRUE; }
    • 小(微小)优化:您不需要那里的“返回”:)
    • 这是一个非常巧妙的方法——更清晰、更正确的答案是 Dale 的答案。
    【解决方案2】:

    在情节提要中,将弹出框锚定到某个任意按钮。不要太担心哪一个会在代码中被覆盖。

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

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

    或者如果您想改为锚定到视图

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

    【讨论】:

      【解决方案3】:

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

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2014-06-18
          • 1970-01-01
          • 1970-01-01
          • 2017-05-12
          • 2013-04-02
          • 2021-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多