加入不同的UILabel在UITableView的每个小区(adding different UIL

2019-10-30 00:36发布

我添加不同的文本中的UITableView每个单元。 然而,当我做到这一点,测试显示在每个细胞中,除了如果theres与1之间的数字9的阵列,以图9中,1是显示在第二单元中的第one..So,2被显示在第三小区和分别。 有一个在第一个单元格显示没有fromHeres代码

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell = [self getCellContentView:CellIdentifier];
}
if (indexPath.row == 0) {
    NSLog(@"hi");
}
//add another textfield
NSString *path = [[NSBundle mainBundle] pathForResource:@"Rankvalue" ofType:@"plist"];
NSMutableArray* rank = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSString *rankValue = [rank objectAtIndex:indexPath.row];

UILabel *rankLabel = (UILabel *)[cell viewWithTag:1];
rankLabel.text = rankValue;
[rankLabel setFont:[UIFont fontWithName:@"austin power" size:[@"40" intValue]]];

CGRect labelFrame = CGRectMake(220,70,50,40.0);
[rankLabel setFrame:labelFrame];

// Configure the cell(thumbnail).
cell.textLabel.text = [self.stars objectAtIndex:indexPath.row];
NSString *path2 = [[NSBundle mainBundle] pathForResource:@"Filename" ofType:@"plist"];
self.filename = [[NSMutableArray alloc] initWithContentsOfFile:path2];
cell.imageView.image = [UIImage imageNamed:[self.filename objectAtIndex:indexPath.row]];

//transparent cell
cell.backgroundColor = [UIColor clearColor];

[rankLabel release];
[rankValue release];

return cell;
}

这是该小区的子视图代码

- (UITableViewCell *) getCellContentView:(NSString *)cellIdentifier {

CGRect CellFrame = CGRectMake(0, 0, 320, 65);
CGRect Label1Frame = CGRectMake(17,5,250,18);  

UILabel *lblTemp;


UITableViewCell *cell = [[[UITableViewCell alloc] initWithFrame:CellFrame reuseIdentifier:cellIdentifier] autorelease];  
lblTemp = [[UILabel alloc] initWithFrame:Label1Frame];
[lblTemp setFont:[UIFont fontWithName:@"Arial-Bold" size:15]];
lblTemp.tag = 1;
lblTemp.backgroundColor=[UIColor clearColor];
lblTemp.numberOfLines=0;
[cell.contentView addSubview:lblTemp];    

return cell;
}

Answer 1:

initWithFrame:reuseIdentifier:已弃用的initWithStyle:reuseIdentifier:

您应该创建的标准样式之一。

对细胞创建设置所需的值(字体等),而不是刷新。 文本框的边框是一样的。 和背景颜色。

真的不想重新加载的plist(哦,还有两个人!)每次刷新单元的时间! 在另一种方法加载一次和缓存它作为伊娃。

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

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
  if (cell == nil) {
    // create and set up all the layout attributes of the cell
    // it should be auto released
    // which should include a call like the following, or loading a cell from a nib
    // cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
    //                               reuseIdentifier:CellIdentifier];
    // [cell autorelease];
  }

  // the only thing that should happen here is setting the data values
  // into the cell!!!!!!  All these values should be loaded once and
  // kept as "model state" by the controller.  Do not create an image
  // each time through, do not load an entire plist to access one item
  // each time through

  rankLabel.text = rankValue;
  cell.textLabel.text = [self.stars objectAtIndex:indexPath.row];
  cell.imageView.image = [self imageAtRow:indexPath.row];


}

如果您的显示图像是对每个小区不同,使用imageNamed:是不恰当的。 如果有2个或3个图像,其指示将每个被使用了很多,细胞的类型imageNamed:可能是优选的。 imageWithContentsOfFile:是你的其他选择,你将需要建立完整的路径



Answer 2:

尝试切换这样的:

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    //cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    cell = [self getCellContentView:CellIdentifier];
}

为了这:

UITableViewCell *cell=[self getCellContentView:CellIdentifier];

不是说这将工作,但只是给它一个镜头。 此外,这样做你getCellContentView内:

[lblTemp release]

或者,你将有一个泄漏。



文章来源: adding different UILabel to each cell in UITableView