【问题标题】:How do I get a Storyboard-created UIViewController without using seagues into a UIPopover?如何在不使用 seagues 进入 UIPopover 的情况下获得 Storyboard 创建的 UIViewController?
【发布时间】:2013-05-15 16:14:10
【问题描述】:

我有一个 iPad 应用程序(XCode 4.6、iOS 6.2、Storyboards、ARC),我在其中创建了一个 UIViewController(未连接到任何 segue)以在 UIPopover 中使用。这些是 ViewController 设置:

我有这段代码应该在 UIPopover 中显示“viewForPopover”视图控制器。

        UIView *anchor = textField;
    UIViewController *viewControllerForPopover =
    [self.storyboard instantiateViewControllerWithIdentifier:@"viewForPopover"];

    popover = [[UIPopoverController alloc]
               initWithContentViewController:viewControllerForPopover];
    [popover presentPopoverFromRect:anchor.frame
                             inView:anchor.superview
           permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

我的问题是:没有 self.storyboard。那么我应该如何到达当前类之外的视图控制器呢? (当前类是 UIView 的子视图)

【问题讨论】:

  • 您不应该真正尝试从“UIView 的子视图”执行此操作 - 您应该将请求传递给控制视图控制器,并且它应该有权访问情节提要。

标签: ios storyboard xcode4.6 uipopover


【解决方案1】:

在 UIStoryboard 上调用此方法:

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

如果您的视图控制器位于“MainStoryboard.storyboard”中,可能会这样:

UIViewController *viewControllerForPopover = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]instantiateViewControllerWithIdentifier:@"viewForPopover"];

【讨论】:

  • 在哪里?用它替换 self.storyboard?
【解决方案2】:

swift的实用功能:

extension UIViewController {


    func presentMyCtl( pushed: Bool){

        let VC = MyController(nibName: "MyController", bundle: nil)

        if pushed{
            let nc = self.navigationController!
            nc.pushViewController(VC, animated: true)

        }else{
            self.present(VC, animated: true, completion: nil)
        }

    }


    func dismissMyCtl(pushed: Bool){

        if pushed{
            let nc = self.navigationController!
            nc.popViewController(animated: true)
        }else{
            self.dismiss(animated: true, completion: nil)
        }
    }
}

其中 MyController.swift 是类的 swift 文件,而 MyController.xib 是包含 UI 的文件。

【讨论】:

    猜你喜欢
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多