6175


ストーリーボードを使わずに下記のようなコードを使用し、 UIViewController 内部で UITableView の Delegate
を呼び出したいです。

[code]

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UITableView *tableView = [[UITableView alloc] init];
        tableView.frame = CGRectMake(0, 0, 300, 200);
        tableView.tag = 1;
        tableView.delegate = self;
    
        [self.view addSubview:tableView];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    #pragma mark - TableView
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        NSLog(@"1");
        return 1;
    }
    
    -(NSInteger)tableView:(UITableView *)tableView
    numberOfRowsInSection:(NSInteger)section{
        NSLog(@"2");
        return 5;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        UITableViewCell *cell= [[UITableViewCell alloc] init];
    
        NSLog(@"3");
        return cell;
    }
    
    @end
    
[/code]

ヘッダファイルは以下のようになっています。

[code]

    @interface ViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
    
[/code]

デリゲートを設定しているはずなのにデリゲートメソッドが呼び出されないのはなぜなのでしょうか？

[iOSのUIViewControllerにtableViewを追加する場合](https://ja.stackoverflow.com/questions/306/ios%E3%81%AEuiviewcontroller%E3%81%ABtableview%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88)  
似たような投稿がありましたがストーリボードを使用せずにコードのみで実装したいです。


CC BY-SA 3.0
2015-02-09T04:18:00.723
6173
2016-12-14T17:01:16.187
2017-04-13T12:52:39.113
-1
5505
question
ios objective-c
UIViewController で UITableView の Delegate を呼び出すには?

[code]

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UITableView *tableView = [[UITableView alloc] init];
        tableView.tag = 1;
        tableView.delegate = self;
        tableView.dataSource = self; // 追加
    }
    
[/code]

UITableViewのDelegateには、UITableViewDelegateプロトコルと、 **UITableViewDataSource**
プロトコルの2種類があって、メソッド「- (NSInteger)numberOfSectionsInTableView:(UITableView
*)tableView」、「-(NSInteger)tableView:(UITableView *)tableView  
numberOfRowsInSection:(NSInteger)section」、「- (UITableViewCell
*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath」は、 **UITableViewDataSource** プロトコルに属していますから、「tableView.dataSource
= self;」がないと、Delegateの受け手にならないのです。


CC BY-SA 3.0
2015-02-09T04:31:03.863
6175
2015-02-09T04:31:03.863
7362
6173
answer