0

これは基本的に私が望むレイアウトです:

ここに画像の説明を入力してください

下部のUITableViewは、特定の投稿へのコメントに対応し、コメントごとに行を追加する必要があります。

下部のUITableViewはcommentTable;に配線されています。他のすべての要素もそれに応じて配線されます。

ビルドして実行すると、エラーは発生しませんが、投稿の下に空のテーブルセルが1つだけ表示されます。

テーブルへのデータのロード/受け渡しに何か足りないものがあることは知っていますが、誰かがこれを機能させる方法について私に指示を与えることができるかどうか疑問に思います。

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
4

2 に答える 2

1

作成したテーブルビューデリゲートメソッドが呼び出されていない可能性があります。最初に行うべきことは、これらのメソッド内にブレークポイントを設定し、アプリを実行して、それらが呼び出されているかどうかを確認することです。

呼び出されていない場合は、デリゲートの設定に失敗している可能性があります。この場合、個別のUITableViewControllerを使用していないようです。むしろ、TableViewが期待どおりに機能するために必要な情報をDetailViewControllerに提供させようとしています。

まず、DetailViewControllerをUITableViewDelegateプロトコルに準拠させる必要があります。

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

次に、UITableViewのデリゲート@propertyを実際に設定する必要があります。これはInterfaceBuilderで行うことができます(テーブルビューを選択し、右クリックして、そのデリゲートプロパティをドラッグして、ファイルの所有者である場合とそうでない場合がある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];

ストーリーボードを見て、接続したのと同じ方法でコンセントを接続することもできますcommentTableUITableView、反対方向にドラッグしてデータソースとデリゲートを選択します

于 2012-10-18T00:03:24.077 に答える