以编程方式在 View Controller 中设置 UITableView

Posted

技术标签:

【中文标题】以编程方式在 View Controller 中设置 UITableView【英文标题】:Setting up a UITableView inside View Controller Programatically 【发布时间】:2013-02-18 17:47:30 【问题描述】:

我在视图控制器中设置了一个 UITableView 控制器,如下所示:

fieldView = [[UITableView alloc] initWithFrame:CGRectMake(0, logoView.bounds.size.height, 320, (screen.size.height - logoView.bounds.size.height)) style:UITableViewStylePlain];
[fieldView setBackgroundColor:[UIColor greenColor]];
fieldView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleTopMargin;

视图控制器设置为 TableViewDelegate,如下所示:

 UIViewController <UITableViewDelegate, UITableViewDataSource...

问题:我需要对表格视图委托方法做什么才能控制这个添加的子视图?

#pragma mark - 
#pragma Table View Delegate Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    NSLog(@"Here");
    return 1;

- (NSString *)tableView:(UITableView *)fieldView titleForHeaderInSection:(NSInteger)section 
    NSString *sectionName;
    NSLog(@"Here2");

以上方法在视图控制器中却没有被调用?

【问题讨论】:

tableView:cellForRowAtIndexPath 在吗? 【参考方案1】:

你需要:

// Add these right after creating the UITableView
fieldView.delegate = self;
fieldView.dataSource = self;

// don't forget to add the tableview
[self.view addSubview:fieldView];

您还需要所有基本的UITableViewDelegateUITableViewDataSource 方法。这与您实现了UITableViewController 完全相同。您至少需要:

tableView:numberOfRowsInSection:
tableView:cellForRowAtIndexPath:

如果您计划支持表格编辑,则必须实现和覆盖其他方法。

【讨论】:

谢谢,我有其他方法只是错过了delegate和dataSource的设置。【参考方案2】:

您需要为表格视图设置委托和数据源。

fieldView.delegate = controller; // self, if you are creating this table inside your controller

【讨论】:

以上是关于以编程方式在 View Controller 中设置 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

删除Popover View Controller -swift

以编程方式为 uiview 设置约束以支持纵向/横向

使用相同的 View Controller 进行添加、显示和编辑

以编程方式在 ViewController 中设置 tableView

如何在不将 nib 名称指定为字符串的情况下使用 nib 加载 View Controller 子类?

以编程方式在 API 级别 7 中设置视图位置