容器视图中的自定义 UITableViewController

Posted

技术标签:

【中文标题】容器视图中的自定义 UITableViewController【英文标题】:Custom UITableViewController inside Container View 【发布时间】:2015-05-12 06:12:01 【问题描述】:

我正在尝试在容器视图中插入自定义 UITableViewController。 Container View 放置在一个静态 UITableView 的单元格内,如下图所示。

http://i.stack.imgur.com/A762B.png

我只是想要一种将静态单元格与动态单元格组合在同一屏幕中的方法。

在身份检查器中,当字段 Class 为空(即标准 UITableViewController)时,它可以在单元格内显示一个空的动态表。但是,当我将自定义类名(扩展 UITableViewController)放在该字段中时,我得到一个 NSInternalInconsistencyException:

[UITableViewController loadView] loaded the "Enx-aT-Rum-view-zY2-9U-Z6d" nib but didn't get a UITableView.

这些是 MyCustomUITableViewController 的内容:

@implementation MyCustomUITableViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
        // Custom initialization
    
    return self;


- (void)viewDidLoad

    [super viewDidLoad];

    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;


- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    // Return the number of sections.
    return 1;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return 2;

@end

我不得不承认我仍然不了解 Container View 背后的所有逻辑,但我只想在里面显示一个视图(不做任何交换或其他操作)。

任何帮助将不胜感激,谢谢!

【问题讨论】:

【参考方案1】:

让我先指出这里的问题-

问题 1:您不能在另一个控制器中拥有一个控制器。这意味着,在您的静态表格视图中,您不能拥有动态表格视图控制器。

解决方案 1:您可以拥有一个动态的 TableView。

问题 2:视图控制器中不能有静态 Tableview。如果你想要一个静态表视图,那么你需要一个 UITableViewController 而不是 UIViewController。

解决方案 2:您只需删除已有的 ViewController 并替换为 UITableViewController。

现在要实现一个控制器,您可以在静态表视图中拥有动态表视图,您需要在静态表的 ViewController 内实现动态表的数据源,这将是一个非常糟糕的做法。 静态表不需要了解动态表的任何信息,至少不需要了解将在动态表中填充的数据。但是,如果您想在静态 tableView 中使用动态 tableview,则静态 tableview 的控制器需要实现 UITableViewDatasource。

因此,您可能需要重新考虑结构。

【讨论】:

以上是关于容器视图中的自定义 UITableViewController的主要内容,如果未能解决你的问题,请参考以下文章

子容器视图中的 UILabel 未更新

呈现子视图控制器的自定义容器视图控制器子项

用两个手指使用 UIScrollView 的自定义容器

在使线性布局容器无效后未调用子视图的 ondraw()

Xcode 自动布局:最适合正方形

顶点ai中的自定义容器部署