gpt4 book ai didi

objective-c - 将 uitableview 填充为 uicollectionview 的 subview

转载 作者:行者123 更新时间:2023-11-28 22:46:40 24 4
gpt4 key购买 nike

我在填充以编程方式创建的 uitableview 作为 uicollectionview 的 subview 时遇到问题。

这是我的代码:

.h文件

#import <UIKit/UIKit.h>

@interface TheViewController : UICollectionViewController<UITableViewDataSource>
@property (atomic,strong) IBOutlet UIBarButtonItem *plus;
-(IBAction) addTeamPressed:(id)sender;
@end

.m文件

- (void)viewDidLoad
{
[super viewDidLoad];
NSError *jsonParsingError = nil;

teamsView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.window.bounds.size.width, self.view.window.bounds.size.height)];
NSData *t = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://..."] options:NSDataReadingMappedIfSafe error:&jsonParsingError];

NSArray *tmp = [NSJSONSerialization JSONObjectWithData:t options:0 error:&jsonParsingError];
UITableViewCell * teamCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
teams = [[NSMutableArray alloc]init];
[teamsView addSubview:teamCell];

teamsView.delegate = self;

teamsView.dataSource = self;
for(int i =0;i<tmp.count;i++){
[teams addObject:[tmp objectAtIndex:i]];
}
plus.title = @"Done";

[self.view addSubview:teamsView];

}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
// If You have only one(1) section, return 1, otherwise you must handle sections
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [teams count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";

TeamsNameCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
cell = [[SquadreNameCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.name.text = [NSString stringWithFormat:@"%@",[[teams objectAtIndex:indexPath.row] objectForKey:@"name"]];
NSLog(@"%d teams",[teams count]);
return cell;
}

我的表格 View 显示正确,当然要感谢这里没有提到的其他功能,但 subview 中没有行。编译器打印出团队的数量,因此它调用委托(delegate)方法,但它不会填充 subview ...

这是怎么回事?

提前致谢达里奥

最佳答案

首先你应该从你的 viewDidLoad 中删除它:

UITableViewCell * teamCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
[teamsView addSubview:teamCell];

然后确保你的teams数组被保留,只需将这一行放到头文件中:

@property (nonatomic, strong) NSMutableArray* teams;

然后使用 self.teams 而不仅仅是 teams

viewDidLoad 方法结束时,您应该调用 [teamsView reloadData];

另外最好更改您的表数据源方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

TeamsNameCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (!cell) {
// please make sure that you allocate required object here
cell = [[TeamsNameCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

// please make sure that you do have `name` property in your `TeamsNameCell` class
cell.name.text = [NSString stringWithFormat:@"%@",[[teams objectAtIndex:indexPath.row] objectForKey:@"name"]];
NSLog(@"%d teams",[teams count]);
return cell;

请确保您的 TeamsNameCell 类在 header 中具有 name 属性:

@property(nonatomic, strong) UILabel* name;

并且不要忘记在 TeamsNameCell 的构造函数中分配此标签:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.name = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,50)];
[self addSubview:self.name];
}
return self;
}

或者也许最好使用默认单元格的标签:

代替 cell.name.text = @"text"; 使用 cell.textLabel.text = @"text";

关于objective-c - 将 uitableview 填充为 uicollectionview 的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052053/

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