UiTableViewController委托方法未在UITableViewController子类中调用

时间:2013-07-17 03:50:53

标签: ios

为什么没有调用numberOfSectionsInTableView方法?如果我在[self.tableView reloadData]中添加viewDidLoad,则会调用它,但即便如此,cellForRow也不会被调用。

修改:我更新了以下代码,以便为UITableViewCell注册nib。

UIViewController中,我有:

- (void)viewDidLoad
{
    [super viewDidLoad];        
    XXFeedTableViewController *tableViewController = [[XXFeedTableViewController alloc] initWithStyle:UITableViewStylePlain];
   tableViewController.view.frame = self.view.bounds;
   [self addChildViewController:tableViewController];
}

XXFeedTableViewController.h

@interface XXFeedTableViewController : UITableViewController
@end

XXFeedTableViewController.m

#import "XXFeedTableViewController.h"
#import "XXFeedTableViewCell.h"

@interface XXFeedTableViewController ()

@end

@implementation XXFeedTableViewController

- (id)initWithStyle:(UITableViewStyle)style {
    self = [super initWithStyle:style];
    if (self) {
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"XXFeedTableViewCell" bundle:nil] forCellReuseIdentifier:@"XXFeedTableViewCell"];
}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"XXFeedTableViewCell";
    XXFeedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = @"Hey";
    return cell;
}

@end

Apple文档说:

  

如果未指定nib文件或nib文件未定义数据源   或委托,UITableViewController设置数据源和   表视图的委托给自己。当表视图即将到来时   在第一次加载时出现,表视图控制器重新加载   表格视图的数据。

1 个答案:

答案 0 :(得分:1)

试试这个,看看它是否有效。这就是Apple现在使用基于笔尖的单元格推荐的方式。

-(void)viewDidLoad {
    [super viewDidLoad];
    [self.tableView registerNib:[UINib nibWithNibName:@"XXFeedTableViewCell" bundle:nil] forCellReuseIdentifier:@"XXFeedTableViewCell"];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 5;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"XXFeedTableViewCell";
    ROFeedTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    cell.textLabel.text = @"Hey";
    return cell;
}

编辑后:

在初始控制器中,您应该在添加子视图之前将表视图控制器添加为子控制器:

   XXFeedTableViewController *tableViewController = [[XXFeedTableViewController alloc] initWithStyle:UITableViewStylePlain];
   self addChildViewController:tableViewController];
   tableViewController.view.frame = self.view.bounds; 
   [self.view addSubview:tableViewController.view]; 
   [tableViewController didMoveToParentViewController:self];