UIViewController 中的 UITableView

Posted

技术标签:

【中文标题】UIViewController 中的 UITableView【英文标题】:UITableView within a UIViewController 【发布时间】:2012-04-25 22:30:02 【问题描述】:

如何在uiviewcontroller 中使用uitableview?下面是我正在尝试做的一个例子(除了这只是我故事板中的UITableview):

我发现我需要将委托和数据源添加到我的标题中:

//MyViewController.h
@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

在我的实现文件中,我添加了所需的方法:

//MyViewController.m

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    // Return the number of sections.
    return 1;


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


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    NSLog(@"cellForRowAtIndexPath");

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"FileCell"];

    NSLog(@"cellForRowAtIndexPath");
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSArray *fileListAct = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:nil];

    cell.textLabel.text = [NSString stringWithFormat:@"%@",[fileListAct objectAtIndex:indexPath.row]];

    return cell;

delegatedatasourceUITableView 都连接在我的故事板中:

我无法让 TableView 加载我告诉它的内容。它总是出现空白。为什么 TableView 不会填充我在 cellForRowAtIndexPath 方法中告诉它的内容?我在这里错过了什么?

【问题讨论】:

【参考方案1】:

您必须将数据源和委托出口从情节提要中的 tableview 链接到视图控制器。这不是可选的。这就是为什么您的表格是空白的,它永远不会调用您的视图控制器的表格视图方法。 (您可以通过在它们上设置断点并确保它们永远不会被触发来证明这一点。)您遇到了什么样的构建错误?

【讨论】:

我不再遇到构建错误,但是当我尝试与表格交互时,应用程序崩溃了。 cellForRowAtIndex 方法是填充表格视图的正确位置吗? 崩溃时的错误信息是什么?在 Objective-C 异常上设置一个断点,这样你就可以找出它在哪一行崩溃了。 我将数据源和委托出口连接到我的 ViewController(正确),我不再遇到构建错误或崩溃。当我在 cellForRowAtIndexPath 和 numberOfRowsInSection 处设置断点时,会找到它们但它们的内容永远不会执行。此外,它甚至从不进入 cellForRowAtIndexPath,这个方法只是被忽略了。为什么会这样? 如果这些方法没有被调用,那是因为委托/数据源连接不正确。【参考方案2】:

您没有返回任何有效值。 看到return; 没有返回任何数值?

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

  return; // it should be return 15; or return self.datasource.count;
  NSLog(@"numberOfRowsInSection");

【讨论】:

【参考方案3】:

你需要一个用于 YourTableView 的 IBOutlet,然后将 TableView 连接到 YourTableView

【讨论】:

【参考方案4】:

问题出在UITableViewDelegate 方法numberOfRowsInSection。这个不返回NSInteger 行数。这个例子可以帮助:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    return theNumberOfRowsForYourTable; // <-- not just return;

【讨论】:

以上是关于UIViewController 中的 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

如果需要,保存 UIViewController 并再次显示

iOS中的UITab冻结

TableView 上的搜索栏不起作用

Swift TableView 不返回 numbersOfRow

我们如何为多个 UITab 使用相同的 WKWebView

如何跳转到iOS开发中另一个UITab下的其他UINavigationController?