gpt4 book ai didi

ios - 如何从实例方法返回 TableView?

转载 作者:行者123 更新时间:2023-11-28 19:53:49 25 4
gpt4 key购买 nike

我正在尝试在我的 RootViewController 中添加一个 TableView 作为 subview 。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 添加为 subview 。

TableViewGeneratorController *tableViewGeneratorController = [[TableViewGeneratorController alloc]initWithNibName:@"TableViewGeneratorController" bundle:nil];

UITableView *tv = [tableViewGeneratorController prepareField];

[self.view addSubview: tv];

发生了什么问题?

谢谢

最佳答案

你所做的并不是真正正确的方法。

直接的问题是您创建的 TableViewGeneratorController 实例超出范围并被释放。这使 TableView 不具有现有的数据源或委托(delegate)。一个简单的解决方法是将 TableViewGeneratorController 实例分配给实例变量而不是局部变量。

但正确的解决方案是将 TableViewGeneratorController 作为 Root View Controller 的子 Controller 嵌入。

TableViewGeneratorController 更改为 UITableViewController 并去掉 prepareField 方法。

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

关于ios - 如何从实例方法返回 TableView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27722494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com