2011-08-08 14 views
0

UIViewControllerサブクラスとセットアップデリゲートメソッドでUITableViewControllerを作成しましたが、データソースデリゲートメソッドが(ログを観察して)呼び出されていません。 UITableViewControllerをサブクラス化する必要がありますか?私は何を取りこぼしたか? MyViewController.mUITableViewデリゲートメソッドが呼び出されていない

- (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; 
} 

MyViewController.hで

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

Iは、別のクラスからテーブルビューと呼ばれる:

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

答えて

5

UITableViewControllerビューコントローラ自体です。通常、ビューコントローラのviewDidLoadには作成しません。通常はUITableViewまたはサブクラスUITableViewControllerを作成し、関連するビューの作成と設定を心配してください。

ビューコントローラを作成し、そのビューをハイジャックしてデリゲートとして接続すると、そのビューが表示されません。ビューは表示されないので、その代理人と話す必要はありません。あなたはおそらくviewDidLoadの中に自分自身に関連するビューを追加しようとしました。

最後に、実装した2つの方法は、UITableViewDelegateではなく、UITableViewDataSourceの一部です。データソースはテーブルの内容を提供し、デリゲートはタップおよびその他の関連イベントについて通知を受けます。したがって、デリゲートではなくデータソースとして自分自身を設定したいと思うかもしれません。

+0

私はあなたの解決策ではありませんでしたが、UITableViewDataSourceでは適切な修正を行いました。 – user523234

0

元のコードには2つのものがありません。 1. MyViewController.hでテーブルビュー変数を作成します。 2. IBのテーブルビューオブジェクトをメインウィンドウ(ビューではない)にドラッグし、デリゲート、データソース、およびビューをファイルの所有者にします。 (テーブルビューオブジェクトのビューは、手順1で作成したテーブルビュー変数に接続する必要があります)。 3. viewDidLoadメソッドに次の行を追加します。myTableViewController.tableView = tView; // tViewは、手順1で作成したテーブルビューです。

また、UITableViewControllerをサブクラス化することもできます。

関連する問題