2012-10-17 121 views
0

這基本上是我想要的佈局:如何將UITableView添加到包含其他對象的父級?

enter image description here

底部應該適應評論到特定的崗位,增加一排爲每個評論的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

你設置/有線委託爲tableview?您的委託方法是否被調用(例如,您是否在數據源方法中設置了斷點)? – isaac

+0

@isaac對不起,我該怎麼做? – pepe

+0

請參閱下面的答案。 – isaac

回答

0

您需要聲明您的視圖控制器爲表視圖

改變該行的委託和數據源在您的.h文件

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

然後在你的viewDidLoad

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

你也可以看故事板,並以同樣的方式連接插座你連接commentTable到你的UITableView,但通過拖動相反的方向,並選擇數據源和代表

+0

我的JSON包含帖子和評論正在作爲'detailItem'傳遞 - 所以應該是'commentTable.dataSource = self .detailItem;'而不是? – pepe

+0

啊不,這裏有點混亂,當你說'commentTable.dataSource = self'時,你實際上說的是視圖控制器正在實現'UITableViewDatasource'協議,並且表視圖應該看這個類,並運行這個協議聲明的方法(比如'cellForRowAtIndexPath')。然後,您可以像這樣完成,告訴表格視圖在該方法的每一行中顯示的內容。因此,您的.h文件中的更改會宣告您的類正在執行聲明爲 –

+0

的協議,因爲它們現在工作得很好 – pepe

1

這可能是表視圖的委託方法的你寫不被調用。你應該做的第一件事是在這些方法中設置斷點,運行你的應用程序,看看它們是否被調用。

如果他們沒有被調用,你可能沒有設置你的委託。在這種情況下,您似乎沒有使用離散的UITableViewController,而是試圖讓您的DetailViewController爲tableView提供必要的信息以按預期工作。

首先,您需要符合您的DetailViewController到的UITableViewDelegate協議:

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 

其次,實際上你需要設置你的UITableView的委託@property。您可以在界面構建器中執行此操作(選擇tableview,右鍵單擊並拖動它的委託屬性以連接到您的DetailViewController,它可能是也可能不是文件的所有者)。如果你寧願做在代碼中,你只需要調用(早期VC的生活,在viewDidLoad中爲例):

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

所以......假設你的委託是所有有線正確,你然後應該返回並測試這些斷點以查看是否調用了表視圖的方法。如果它們被調用,下一步將是在調用斷點時評估變量,例如檢查numberOfRowsInSection中返回的數字以及cellForRowAtIndexPath中的值是否符合您的預期。

+0

這些行是否進入'h'或'm' DetailViewController文件? – pepe

+0

第一行在.h中,第二個將在.m – isaac

+0

感謝幫助isaac – pepe

相關問題