UITableViewController问题

时间:2009-10-19 18:26:26

标签: iphone objective-c uitableview

我有一个包含两个TableView的笔尖。表视图与我创建的同一个类是UITableViewController的子类。我相信一切都是正确的。但是,当我将UITableView设置为UITableViewController然后运行

[uitableviewcontrollervariablename reloadData];

我首先得到一个警告,该类可能无法响应reloadData。我以为所有UITableViewControllers都有一个reloadData类?

我试图错误地连接这些项目?

使用代码更新 TopicViewController.h

@interface TopicViewController : UIViewController {
    NSInteger topicID;
    Topic *topic;

    IBOutlet ThoughtTableViewController *featured;

}

@property (retain) Topic *topic;
@property (readonly) NSInteger topicID;
@property (retain) IBOutlet ThoughtTableViewController *featured;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)ID;

@end

TopicViewController.m

@implementation TopicViewController

@synthesize topic;
@synthesize topicID;
@synthesize featured;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil ID:(NSInteger)ID {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        topicID = ID;
    }
    return self;
}

- (void)dealloc {
    [topic release];
    [super dealloc];
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    topic = [[Topic alloc] initWithID:topicID];

    NSArray *thoughts = [topic getFeaturedThoughts];
    featured = [[ThoughtTableViewController alloc] initWithStyle:UITableViewStylePlain thoughts:thoughts];
    [self.featured.tableView reloadData];
}

@end

1 个答案:

答案 0 :(得分:8)

你的连接很好......你只需要在TableView类上调用该方法,而不是控制器:

[uitableviewcontrollervariablename.tableView reloadData];

编辑:10/20/09
很难看到发生了什么,因为你使用IB而不是以编程方式添加表格,但是连接应该是这样的:

  • UIViewController拥有两个UITableViews,而不是两个UITableViewControllers
  • UIViewController充当UITableViewDataSource,UITableViewDelegate
  • 要求重新加载每个tableViews将向DataSource询问数据,在这些数据中您必须区分这两个

下面是一些代码作为示例,如何以编程方式执行:

@interface WhateverController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
    …
    UITableView *tableView1;
    UITableView *tableView2;
}
@end

-

@implementation WhateverController

…

- (void)loadView {
    [super loadView];
    tableView1 = [[UITableView alloc] initWithFrame:CGRectMake(YOUR_FRAME_1)];
    tableView2 = [[UITableView alloc] initWithFrame:CGRectMake(YOUR_FRAME_2)];
    tableView1.delegate = self;
    tableView2.delegate = self;
    tableView1.dataSource = self;
    tableView2.dataSource = self;
    [self.view addSubview:tableView1];
    [self.view addSubview:tableView2];

}

-

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (tableView == tableView1) {
        // return a cell using the data for tableView1
    } else if (tableView == tableView2) {
        // return a cell using the data for tableView2
    }
}

因此,您将添加填充2个tableView所需的所有UITableViewDelegate方法和UITableViewDataSource方法。如果要重新加载数据:

[tableView1 reloadData];
[tableView2 reloadData];