这基本上就是我想要的布局:
底部的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
DetailViewController.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
答案 0 :(得分:1)
可能是您正在编写的表视图委托方法未被调用。您应该做的第一件事是在这些方法中设置断点,运行您的应用程序,并查看它们是否被调用。
如果他们没有被调用,您可能无法设置您的代理人。在这种情况下,您似乎没有使用离散的UITableViewController,而是试图让您的DetailViewController提供tableView按预期工作的必要信息。
首先,您需要将DetailViewController符合UITableViewDelegate协议:
@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
其次,您需要实际设置UITableView的委托@property。您可以在界面构建器中执行此操作(选择tableview,右键单击,拖动它的委托属性以连接到您的DetailViewController,它可能是也可能不是File的所有者)。如果您宁愿在代码中执行此操作,则只需调用(例如,在VC的生命早期,在viewDidLoad中):
self.tableView.delegate = self;
self.tableView.datasource = self;
所以...假设您的委托都已正确连接,您应该返回并测试这些断点,以查看是否正在调用表视图的方法。如果调用它们,下一步是在调用断点时评估变量,例如检查numberOfRowsInSection中返回的数字和cellForRowAtIndexPath中的值是否与您预期的相匹配。
答案 1 :(得分:0)
您需要将视图控制器声明为表视图的委托和数据源
更改.h
文件
@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
然后在viewDidLoad
commentTable.dataSource = self;
commentTableView.delegate = self;
[commentTableView reloadData];
[self configureView];
您还可以查看故事板,并按照将commentTable
连接到UITableView
的方式连接插座,但是向相反方向拖动并选择数据源和委托