2011-08-08 62 views
0

我在UIViewController子类中创建了一个UITableViewController并设置了委托方法,但数据源委托方法没有被调用(通过观察日志)。我是否需要继承UITableViewController?我错过了什么?UITableView委托方法不被调用

在MyViewController.h

@interface MyViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> { 
UITableViewController *myTableViewController; 
} 
@property (nonatomic, assign) UITableViewController *myTableViewController; 

在MyViewController.m

- (void)viewDidLoad 
{ 
    myTableViewController = [[UITableViewController alloc]initWithStyle:UITableViewStylePlain]; 
    myTableViewController.tableView.delegate = self; 

} 

- (NSInteger)tableView:(UITableView *)tableView 
numberOfRowsInSection:(NSInteger)section { 
    NSLog(@"numberOfRowsInSection"); 
    return [self.assets count]; //assets is NSMutableArray 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSLog(@"cellForRowAtIndexPath"); 
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: 
          SimpleTableIdentifier]; 
    if (!cell) { 
     cell = [[[UITableViewCell alloc] 
       initWithStyle:UITableViewCellStyleDefault 
       reuseIdentifier:SimpleTableIdentifier] autorelease]; 
    } 
    NSUInteger row = [indexPath row]; 
    cell.textLabel.text = [assets objectAtIndex:row]; //assets is NSMutableArray 
    cell.textLabel.font = [UIFont boldSystemFontOfSize:50]; 
    return cell; 
} 

我称为从另一个类表视图:

UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:myTableViewController]; 

回答

5

UITableViewController一个本身是一个视图控制器。所以你通常不会在视图控制器的viewDidLoad中创建一个。您通常会创建一个UITableView或子类UITableViewController,让它担心创建和设置相关视图。

即使您正在创建视图控制器,然后劫持其视图以作为委托连接到您,但您无法显示该视图。由于视图从不显示,因此永远不需要与其代表交谈。您可能打算在viewDidLoad之内向您自己添加相关视图。

最后,您实施的两种方法是UITableViewDataSource的一部分,而不是UITableViewDelegate。数据源提供表格内容,委托人获知有关水龙头和其他相关事件的信息。所以你可能想把自己设置为数据源,而不是委托。

+0

虽然我没有与您的解决方案,但在UITableViewDataSource良好的纠正。 – user523234

0

我的原始代码中缺少两件东西: 1.在MyViewController.h中创建一个表视图变量。 2.在IB中将表格视图对象拖到主窗口(而不是任何视图),并将委托,数据源和视图设置为文件的所有者。 (注意表视图对象的视图将需要连接到您在步骤1中创建的表视图变量。) 3.将此行添加到viewDidLoad方法:myTableViewController.tableView = tView; // tView是您在步骤1中创建的表格视图。

或者你也可以继承UITableViewController。