gpt4 book ai didi

ios - 如何让这个 UITableView 显示出来?

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

我不知道如何显示这个 UITableView

除 Nib 外,代码完全以编程方式创建表格。

nib 是一个简单的单元格,可以在同一应用程序的其他 UITableView 中工作。

当创建 TableView 并将其作为 subview 添加到 view 并调用 reloadData 时,numberOfSectionsInTableView:tableView :numberOfRowsInSection: 都被调用了。它们都返回 1。 (我检查了调试器。)

然而 tableView:cellForRowAtIndexPath: 从未被调用。

我使用 NSLayoutConstraint 将 tableView 添加到它的父 View ,强制它的高度,但那个地方没有显示任何内容。

View 层次结构调试器在该位置不显示任何内容,并且表顶部没有 View 。

应用程序运行没有任何错误或崩溃。

非常感谢您的帮助。

@interface MyViewCell : UITableViewCell
@property (weak, nonatomic) IBOutlet UIButton *button;
@end

@implementation MyViewCell
@end

@interface MyDataTableEntry : NSObject
@property (nonatomic, strong) NSString* title;
@end

@implementation MyDataTableEntry
@end

@interface MyDataTable : NSObject <UITableViewDataSource, UITableViewDelegate>
@property (strong, nonatomic) UITableView *tableView;
@property (strong, nonatomic) NSArray *rows;
@property (strong, nonatomic) UINib* nib;
@end

@implementation MyDataTable

- (UINib*)getAndRegisterNib:(NSString*)reuseIdentifier {
UINib* nib = [UINib nibWithNibName:reuseIdentifier bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:reuseIdentifier];
return nib;
}

- (id)initWithRows:(NSArray*) rows andView:(UIView*)view {
if (self = [super init]) {
self.rows = rows;
self.tableView = [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStylePlain];
self.nib = [self getAndRegisterNib:@"PrototypeCell"];
self.tableView.delegate = self;
self.tableView.dataSource = self;
self.tableView.backgroundColor = [UIColor grayColor];
}

return self;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.rows.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"PrototypeCell" forIndexPath:indexPath];

MyDataTableEntry* entry = self.rows[indexPath.row];

[cell.button setTitle:entry.name forState:UIControlStateNormal];
cell.button.backgroundColor = [UIColor blueColor];

return cell;
}

@end

这是创建表格的片段:

MyDataTableEntry* entry = [[MyDataTableEntry alloc] init];
entry.title = @"hello";
self.dataTable = [[MyDataTable alloc] initWithRows:@[entry] andView:self.view];
[self.view addSubview:self.dataTable.tableView];
[self.dataTable.tableView setNeedsLayout];
[self.dataTable.tableView layoutIfNeeded];
[self.dataTable.tableView reloadData];

最佳答案

无需在调试器中确认:

问题出在这里:

self.dataTable = [[MyDataTable alloc] initWithRows:@[entry] andView:self.view];
[self.view addSubview:self.dataTable];

self.dataTable 是一个 NSObject。第二行应该是这样的:

[self.view addSubview:self.dataTable.tableView];

我还建议您进行一些重构。 MyDataTable 不是 View 。它是一个 Controller 。因此重命名为 MyDataTableController。那么错误会更加明显。

我还要问你为什么在代码中这样做?你已经在使用 Nib 了。那么为什么不去 Storyboard。这样做并使用 UITableViewController 作为基类应该可以让您删除大量代码和潜在的错误。

关于ios - 如何让这个 UITableView 显示出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36325477/

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