我将uitableviewcell子类化,以便可以为所有单元格应用标准的背景和文本,这是我的首次尝试,但是我主要尝试显示我的意愿。虽然我只停留在一个问题上。我的桌子有两组,我希望第一组的文字居中,第二组的左侧对齐。但是目前还没有这样的运气。
CustomCell.m
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell: self];
NSLog(@"%i", indexPath);
int rows = [(UITableView *)self.superview numberOfRowsInSection:indexPath.section];
NSLog(@"%i", rows);
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
if (centerText) {
cellText = [[[UILabel alloc] initWithFrame:CGRectMake(0, 15, self.bounds.size.width - 10, 30)] autorelease];
cellText.textAlignment = UITextAlignmentCenter;
}else {
cellText = [[[UILabel alloc] initWithFrame:CGRectMake(20, 15, self.bounds.size.width - 10, 30)] autorelease];
cellText.textAlignment = UITextAlignmentLeft;
}
cellText.font = [UIFont boldSystemFontOfSize:16];
cellText.backgroundColor = [UIColor clearColor];
cellText.shadowColor = [UIColor colorWithWhite:1.0 alpha:0.5];
cellText.shadowOffset = CGSizeMake(0,1);
cellText.textColor = [UIColor colorWithRed:0x4c/255.0 green:0x4e/255.0 blue:0x48/255.0 alpha:1.0];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:self.frame];
UIImage* img = [UIImage imageNamed:@"odd_slice.png"];
imgView.image = img;
self.backgroundView = imgView;
[imgView release];
UIImage *accessoryImage = [UIImage imageNamed:@"content_arrow.png"];
UIImageView *accessoryView = [[UIImageView alloc] initWithImage:accessoryImage];
// accessoryView.image = accessoryImage;
self.accessoryView = accessoryView;
[accessoryView release];
//Selected State
UIImage *selectionBackground = [UIImage imageNamed:@"row_selected.png"];
UIImageView *selectionView = [[UIImageView alloc] initWithFrame:self.frame];
selectionView.image = selectionBackground;
self.selectedBackgroundView = selectionView;
[selectionView release];
//Adds Text
[self addSubview:cellText];
}
return self;
}
TableView.m
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
CoCoachAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSArray *keys = [[appDelegate rowersDataStore] allKeys];
static NSString *CellIdentifier = @"Cell";
CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
switch (indexPath.section) {
case 0:
[cell setCenterText:YES];
break;
case 1:
[cell setCenterText:NO];
break;
default:
break;
}
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
switch (indexPath.section) {
case 0:
[cell.cellText setText:@"Create New Rower"];
break;
case 1:
[cell.cellText setText:[keys objectAtIndex:indexPath.row]];
break;
default:
break;
}
// Set up the cell...
return cell;
}
有人有什么建议吗?
最佳答案
您误解了可重用单元的工作方式。调用dequeueReusableCellWithIdentifier
时,您将获得一个已经分配的单元格。它可能已在您的代码中用于任一组。
这是没有意义的代码:
if (cell == nil) {
switch (indexPath.section) {
case 0:
[cell setCenterText:YES];
break;
case 1:
[cell setCenterText:NO];
break;
default:
break;
}
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
您正在获取一个单元格。如果不存在,则设置居中(不执行任何操作;请记住,
cell
是nil
)。然后创建一个。但是,您真正要做的是在获取或创建单元格之后设置居中位置。您不在乎如何获得它;您只想将其重新配置为当前值。
CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[CustomCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
switch (indexPath.section) {
case 0:
[cell setCenterText:YES];
[cell.cellText setText:@"Create New Rower"];
break;
case 1:
[cell setCenterText:NO];
[cell.cellText setText:[keys objectAtIndex:indexPath.row]];
break;
default:
break;
}
关于iphone - 确定子类UITableViewCell的indexPath,以便我可以指定UILabel的对齐方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6945240/