TableViewGeneratorController

TableViewGeneratorController

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

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

我创建了一个TableViewGeneratorController,它可以作为独立应用程序正常运行。然后从我的RootViewController创建了TableViewGeneratorController的一个实例,并尝试调用实例方法prepareField,该方法将返回TableView。我有TableView但
numberOfRowsInSectioncellForRowAtIndexPath没有被调用。

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/

10-10 20:40