0

这是我的故事板:

在此处输入图像描述

UITableViewController 有一个通用的 UITableCell (MMSwitchTableCell),它有一个图像、一个标签和一个开关。

这个想法是能够创建不同的 UITableViewControllers 来呈现具有相同布局的不同数据,即具有相同的单元格对象和相同的行为。例如,一次 UITableView 有一个可以帮助您选择水果的单元格列表,第二次 UITable 可以帮助您选择家具。这两个 UITablesViewController 之间没有任何关系(没有继承或聚合),它们是不同 viewController 中的不同实例,我只想重用设计的控件和 UITableCell 代码。

所以我的代码有一个 UIViewController 我在其中声明了一个属性:

@property (strong, nonatomic) MMGoSeePopoverTableViewController* goSeePopoverTableViewController;

并延迟加载它:

-(MMGoSeePopoverTableViewController*) goSeePopoverTableViewController
{
    if(_goSeePopoverTableViewController == nil)
    {
        _goSeePopoverTableViewController =(MMGoSeePopoverTableViewController*)
        [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"];
    }

    return _goSeePopoverTableViewController;
}

和第二个 UIViewController 我在其中声明了一个属性:

 @property (strong, nonatomic) MMLayersPopoverTableViewController* layersPopoverTableViewController;

并延迟加载它:

-(MMLayersPopoverTableViewController*) layersPopoverTableViewController
{
    if(_layersPopoverTableViewController == nil)
    {
        _layersPopoverTableViewController =(MMLayersPopoverTableViewController*)
        [self.storyboard instantiateViewControllerWithIdentifier:@"switchPopover"];
    }

    return _layersPopoverTableViewController;
}

在情节提要中,我将自定义类设置为 MMLayersPopoverTableViewController,但我希望将其留空并以某种方式在代码中进行设置。我想我应该在惰性加载器中执行此操作,但我不知道该怎么做。

编辑

建议的“这个问题在这里可能已经有了答案:”与我所问的不同。我已经修改了帖子以更好地解释我的问题。

4

1 回答 1

0

这个想法是能够创建不同的 UITableViewControllers 来呈现具有相同布局的不同数据,即具有相同的单元格对象和相同的行为。

这听起来像是您应该使用 .xib 文件而不是故事板的情况。与 .xib 文件相比,故事板的优势在于您可以根据视图和相应的视图控制器查看应用程序的结构。但是,在您的情况下,您正在尝试使用不同的视图控制器重用相同的视图。将您的表格放在视图控制器拥有的 .xib 文件中,您可以使用您决定实例化的任何视图控制器加载相同的表格、单元格等。

在您的 .xib 文件中,将 File's Owner 代理的类型设置为所有视图控制器类的某个公共超类,其中包含所有必要的功能。例如,如果您的所有视图控制器都派生自UITableViewController并且您不需要任何特殊的插座,请将类型设置为UITableViewController并将表连接到代理的tableView插座。如果您的视图控制器有其他常见行为,请将所有这些放在 的子类中UITableViewController,将其用作代理的类型,并从该类派生其他视图控制器。

完成所有这些后,您可以使用该-initWithNibName:bundle:方法来初始化任何视图控制器并加载相同的视图:

// in one place...
MMGoSeePopoverTableViewController *goSeeVC = [[MMGoSeePopoverTableViewController alloc]
                                              initWithNibName:@"CommonTableView.xib" bundle:nil"];
// and in some other place...
MMLayersPopoverTableViewController *layersVC = [[MMLayersPopoverTableViewController alloc]
                                              initWithNibName:@"CommonTableView.xib" bundle:nil"];
于 2013-08-27T02:53:35.470 回答