自定义视图与故事板

在复杂的屏幕(视图控制器)中,我用小部分来分隔整个事物(我称它们为小部件)。 这些小部件基本上由MyWidget.hMyWidget.m文件以及MyWidget.xib文件组成,其中根元素是UIView ,而MyWidget类是UIView的文件所有者。 在这个小部件的init中,我做了一个loadNibNamed

在我的View Controller中,我做了一个[[MyWidget alloc] init] ,我将它添加到View的Controller主视图中作为子视图。 到目前为止,这完美地工作。

我现在想知道,如何在故事板上做同样的事情,因为我无法真正开始在某处放入UIView ,我总是必须从一个UIViewController开始,我不想这样做。

如果没有可能的方式使用Storyboard进行此操作,我可以简单地以旧的方式进行操作:通过使用故事板来显示主屏幕和细节,并使用单独的.xib文件来定义自定义视图?


将窗口小部件/视图放在一个单独的.xib文件中就行得通,如果您想从多个视图控制器引用相同的视图,那么这种方法尤其适用。

但是,有时您希望在同一个故事板中看到附加的视图/小部件,这是可能的。 这是你如何做到的:

  • 在IB中选择您的视图控制器(点击视图下方的黑色条),然后将UIView从对象库拖到黑色条中:

    在这里输入图像描述

  • 当一个视图位于黑色栏中时,它就像IB中的任何其他视图一样被实例化,但只有在代码中这样做之后才会添加到视图层次结构中。 根据需要更改视图的类以匹配您自己的子类:

    在这里输入图像描述

  • 你可以将它连接到你的视图控制器,就像你连接任何其他视图一样: 在这里输入图像描述

  • 添加的视图显示在您的文档大纲中,您也可以在其中链接操作和引用:

    在这里输入图像描述


  • 现在,仍然存在的问题是,无论您尝试点击或双击多少次,都无法真正看到视图,这会挫败将其放入同一个故事板的全部目的。 幸运的是,我知道有两种解决方法。

    第一个解决方法是将视图从黑色栏拖回到视图控制器视图中,编辑它,然后在完成后将其拖回黑色栏。 这很麻烦但可靠。

    另一个解决方法是更挑剔,但我更喜欢它,因为它让我同时看到我所有的观点:

  • 将UITableView从对象库拖到新添加的视图中。
  • 然后将一个UITableViewCell拖入该UITableView。

    在这里输入图像描述

  • 一旦你这样做了,你的视图就会在旁边神奇地弹出,但你有一个你不想要的UITableView。 你可以调整它到0x0,或者你可以删除它,你的UIView将(通常)仍然可见。

  • 偶尔次要视图将在IB中再次隐藏。 如果您删除了UITableView,您可以重复上述步骤,或者如果UITableView仍处于层次结构中,您只需点击UITableViewCell,视图就会再次出现。
  • 第二种方法适用于UIViews,但对于UIToolbars不太适用,对于UIButtons不可能,所以当你需要包含很多不同的子视图时,我发现最干净的解决方案是将一个辅助UIView作为容器附加到视图控制器上永远不会显示,将所有次要视图放在那里,并使用UITableViewCell技巧使所有内容都可见。 我调整我的虚拟UITableView到0x0,使其看不见。 下面是它们如何在一起的截图:

    在这里输入图像描述


    如果你只是想让你的视图控制器在其他地方(而不是你的故事板),那么有一个非常简单的方法来实现这一点:

    1)像往常一样用他们各自的xib创建你的CustomViewController (我试过的代码中的abcdController )。

    2)添加一个UIViewController (或任何您的CustomViewController的超类)到故事板。

    3)将CustomClass设置为CustomViewController而不是UIViewController ,如下所示:

    在这里输入图像描述

    4)最后,在你的viewDidLoad ,加载自定义的xib ,就完成了。

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [[NSBundle mainBundle] loadNibNamed:@"abcdController" owner:self options:nil];
        // Do any additional setup after loading the view from its nib.
    }
    

    我认为你可以做这样的事情来从Storyboard获得特定视图控制器的实例,并在其上使用视图。

    ex:
    MyViewController* myViewController = [[UIStoryboard storyboardWithName:@"Main"  bundle:nil] instantiateViewControllerWithIdentifier:@"myViewController"];
    UIView* view = myViewController.view; //Get the view from your StoryBoard.
    

    希望这可以帮助

    谢谢Vijay

    链接地址: http://www.djcxy.com/p/87697.html

    上一篇: Custom views with Storyboard

    下一篇: Correct way to load a Nib for a UIView subclass