0

这基本上是我想要的布局:

在此处输入图像描述

底部的 UITableView 应该容纳对特定帖子的评论,为每个评论添加一行。

底部的 UITableView 连接到commentTable; 所有其他元素也相应地接线。

当我构建并运行时,没有错误,但我只看到帖子下方的一个空表格单元格。

我知道在将数据加载/传递到我的表时缺少一些东西,但我想知道是否有人可以指导我如何完成这项工作。

DetailViewController.h

#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController {
    IBOutlet UIImageView  *postThumbView;
    IBOutlet UILabel      *postTextLabel;
    IBOutlet UIImageView  *postAuthorPictureView;
    IBOutlet UILabel      *postAuthorNameLabel;
    IBOutlet UILabel      *postTimestampLabel;
    IBOutlet UIScrollView *scroller;
    IBOutlet UITableView  *commentTable;
}

@property (strong, nonatomic) id detailItem;
@end

细节视图控制器.m

#import "DetailViewController.h"

@interface DetailViewController ()

- (void)configureView;

@end

@implementation DetailViewController;

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureView];
}

- (void)configureView
{
    if (self.detailItem) {
        NSDictionary *post           = self.detailItem;
        NSString     *postText       = [post objectForKey:@"post_text"];
        ...

        postTextLabel.text  = postText;
        ...
    }
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSDictionary *post           = self.detailItem;
    NSDictionary *commentThread  = [post objectForKey:@"comment"];

    return commentThread.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"commentCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    NSDictionary *post           = self.detailItem;
    NSDictionary *commentThread  = [post objectForKey:@"comment"];

    NSString     *commentText       = [commentThread objectForKey:@"comment_text"];
    NSString     *commentAuthorName = [commentThread objectForKey:@"comment_author_name"];

    cell.textLabel.text = commentText;
    cell.detailTextLabel.text = [NSString stringWithFormat:@"by %@", commentAuthorName];

    return cell;
}

@end
4

2 回答 2

1

可能是您编写的表视图委托方法没有被调用。您应该做的第一件事是在这些方法中设置断点,运行您的应用程序,然后查看它们是否被调用。

如果他们没有被调用,您可能无法设置您的委托。在这种情况下,您似乎没有使用离散的 UITableViewController,而是试图让您的 DetailViewController 为 tableView 按预期工作提供必要的信息。

首先,您需要使您的 DetailViewController 符合 UITableViewDelegate 协议:

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

其次,您需要实际设置 UITableView 的委托 @property。您可以在界面生成器中执行此操作(选择表格视图,右键单击,拖动它的委托属性以连接到您的 DetailViewController,它可能是也可能不是文件的所有者)。如果您希望在代码中执行此操作,您只需调用(例如,在 VC 生命的早期,在 viewDidLoad 中):

self.tableView.delegate = self;
self.tableView.datasource = self;

所以......假设您的委托都正确连接,然后您应该返回并测试这些断点以查看是否正在调用表视图的方法。如果它们被调用,下一步将是在调用断点时评估变量,例如检查 numberOfRowsInSection 中返回的数字和 cellForRowAtIndexPath 中的值是否符合您的预期。

于 2012-10-17T23:58:13.990 回答
0

您需要将视图控制器声明为表视图的委托和数据源

更改.h文件中的这一行

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

然后在你的viewDidLoad

commentTable.dataSource = self;
commentTableView.delegate = self;
[commentTableView reloadData];
[self configureView];

您还可以查看故事板,并以与连接commentTable到您的相同的方式连接插座 n UITableView,但通过向相反方向拖动并选择数据源和委托

于 2012-10-18T00:03:24.077 回答