我正在尝试在我的RootViewController中添加TableView作为子视图.TableView将来自另一个ViewController(TableViewGeneratorController
)实例方法。
那么,什么是最好的方法呢?
我创建了一个TableViewGeneratorController,它可以作为独立应用程序正常运行。然后从我的RootViewController创建了TableViewGeneratorController的一个实例,并尝试调用实例方法prepareField
,该方法将返回TableView。我有TableView但numberOfRowsInSection
和cellForRowAtIndexPath
没有被调用。
TableViewGeneratorController.h
#import <UIKit/UIKit.h>
@interface TableViewGeneratorController:UIViewController<UITableViewDataSource,UITableViewDelegate>
{
UITableView *tableView;
}
@property(strong,nonatomic)UITableView *generatedTbleView;
- (UITableView *)prepareField;
@end
TableViewGeneratorController.m
#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
RootViewController.m
在这里,我试图将TableView添加为子视图。
TableViewGeneratorController *tableViewGeneratorController = [[TableViewGeneratorController alloc]initWithNibName:@"TableViewGeneratorController" bundle:nil];
UITableView *tv = [tableViewGeneratorController prepareField];
[self.view addSubview: tv];
这是怎么回事?
谢谢
最佳答案
您正在做的事情并不是正确的方法。
直接的问题是您创建的TableViewGeneratorController
实例超出范围并被释放。这使表视图中没有现有的数据源或委托。一个简单的解决方法是将TableViewGeneratorController
实例分配给实例变量而不是局部变量。
但是正确的解决方案是将TableViewGeneratorController
嵌入为根视图控制器的子控制器。
将TableViewGeneratorController
更改为UITableViewController
并摆脱prepareField
方法。
然后,在创建TableViewGeneratorController
时,将其添加为子控制器。有关详细信息,请参见UIViewController
文档。
关于ios - 如何从实例方法返回TableView?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27722494/