如何从实例方法返回TableView?

时间:2014-12-31 14:32:46

标签: ios objective-c uitableview

我正在尝试在我的RootViewController中添加一个TableView作为子视图.TableView将来自另一个ViewController(TableViewGeneratorController)实例方法。

那么,最好的方法是什么?

我创建了一个TableViewGeneratorController它可以作为一个独立的应用程序正常工作。然后从我的RootViewController我创建了一个TableViewGeneratorController实例并尝试调用实例方法prepareField,它将返回TableView。我得到了TableView但是 <{1}}和numberOfRowsInSection未被调用。

TableViewGeneratorController.h

cellForRowAtIndexPath

TableViewGeneratorController.m

#import <UIKit/UIKit.h>

@interface TableViewGeneratorController:UIViewController<UITableViewDataSource,UITableViewDelegate>
{
    UITableView *tableView;

}
@property(strong,nonatomic)UITableView *generatedTbleView;
- (UITableView *)prepareField;
@end

RootViewController.m

这里我试图将TableView添加为子视图。

#import "TableViewGeneratorController.h"
#import "RootViewController.h"

@interface TableViewGeneratorController (){
}
@end

@implementation TableViewGeneratorController
- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (UITableView *)prepareField
{
    tableView = [[UITableView alloc]initWithFrame:CGRectMake(10, 80, 300, 500)];
    tableView.dataSource = self;
    tableView.delegate = self;
    tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight |     UIViewAutoresizingFlexibleWidth;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    [tableView reloadData];
    return tableView;

}



#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 1;
}

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



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIndentifier = @"Cell";
    UITableViewCell *cell = [tableView    dequeueReusableCellWithIdentifier:cellIndentifier];
    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIndentifier];
    }
    cell.textLabel.text = @"Yes";
    return cell;

}

@end

发生了什么问题?

感谢

1 个答案:

答案 0 :(得分:3)

你在做什么并不是正确的方法。

当前问题是您创建的TableViewGeneratorController实例超出范围并被取消分配。这使得表视图不具有现有数据源或委托。一个简单的解决方法是将TableViewGeneratorController实例分配给实例变量而不是局部变量。

但正确的解决方案是将TableViewGeneratorController嵌入到根视图控制器的子控制器中。

TableViewGeneratorController更改为UITableViewController并删除prepareField方法。

然后,当您创建TableViewGeneratorController时,将其添加为子控制器。有关详细信息,请参阅UIViewController的文档。