我正在尝试在我的RootViewController中添加一个TableView作为子视图.TableView将来自另一个ViewController(TableViewGeneratorController
)实例方法。
那么,最好的方法是什么?
我创建了一个TableViewGeneratorController它可以作为一个独立的应用程序正常工作。然后从我的RootViewController我创建了一个TableViewGeneratorController实例并尝试调用实例方法prepareField
,它将返回TableView。我得到了TableView但是
<{1}}和numberOfRowsInSection
未被调用。
cellForRowAtIndexPath
#import <UIKit/UIKit.h>
@interface TableViewGeneratorController:UIViewController<UITableViewDataSource,UITableViewDelegate>
{
UITableView *tableView;
}
@property(strong,nonatomic)UITableView *generatedTbleView;
- (UITableView *)prepareField;
@end
这里我试图将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
发生了什么问题?
答案 0 :(得分:3)
你在做什么并不是正确的方法。
当前问题是您创建的TableViewGeneratorController
实例超出范围并被取消分配。这使得表视图不具有现有数据源或委托。一个简单的解决方法是将TableViewGeneratorController
实例分配给实例变量而不是局部变量。
但正确的解决方案是将TableViewGeneratorController
嵌入到根视图控制器的子控制器中。
将TableViewGeneratorController
更改为UITableViewController
并删除prepareField
方法。
然后,当您创建TableViewGeneratorController
时,将其添加为子控制器。有关详细信息,请参阅UIViewController
的文档。