将UILabel作为子视图添加到UITableViewCell时遇到了一些麻烦。我的代码:
bookMarkTable=[[UITableView alloc]initWithFrame:CGRectMake(0, 50, 480, 270)];
bookMarkTable.rowHeight = 38.0f;
bookMarkTable.backgroundColor=[UIColor colorWithRed:247/255.0 green:246/255.0 blue:242/255.0 alpha:1];
[bookMarkTable setDelegate:self];
[bookMarkTable setDataSource:self];
[bookMarkMainView addSubview:bookMarkTable];
和UITableView委托方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return bookMarksArray.count;
}
- (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];
}
// Configure the cell...
NSMutableDictionary* cellDictionary =[bookMarksArray objectAtIndex:indexPath.row];
UILabel* bookMarkTitle =[[UILabel alloc]initWithFrame:CGRectMake(50, 0, 370, 40)];
bookMarkTitle.text=[cellDictionary valueForKey:@"bm_title"];
bookMarkTitle.backgroundColor=[UIColor clearColor];
bookMarkTitle.font=[UIFont fontWithName:@"Georgia" size:20.0f];
[cell.contentView addSubview:bookMarkTitle];
return cell;
}
- (CGFloat) tableView: (UITableView *) tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath{
return 38.0f;
}
我通过这种方法添加行
-(void)addBookmark{
NSMutableDictionary* infoDict=[[NSMutableDictionary alloc]init];
NSString* bookmarkTitle=[NSString stringWithFormat:@"This is :[%i]",bookMarksArray.count];
[infoDict setValue:bookmarkTitle forKey:@"bm_title"];
[bookMarksArray addObject:infoDict];
[bookMarkTable reloadData];
}
但是当我多次调用此方法时,似乎所有UILabel都被添加了多次。结果为
感谢任何帮助!
答案 0 :(得分:0)
从- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
开始,您必须删除子视图。
for(UIView* vista in cell.contentView){
[vista removeFromSuperview];
}
就是这样。
PD:检查删除的视图是否正确。
答案 1 :(得分:0)
每次移动表格时,都会调用该方法并向单元格添加新的UILabel
。
您应该创建UITableViewCell
的子类并在那里添加标签。
其他选项,因为您只使用一个标签,是使用UITableViewCell的默认标签。
更改
UILabel* bookMarkTitle =[[UILabel alloc]initWithFrame:CGRectMake(50, 0, 370, 40)];
bookMarkTitle.text=[cellDictionary valueForKey:@"bm_title"];
bookMarkTitle.backgroundColor=[UIColor clearColor];
bookMarkTitle.font=[UIFont fontWithName:@"Georgia" size:20.0f];
[cell.contentView addSubview:bookMarkTitle];
到
cell.textLabel.text = [cellDictionary valueForKey:@"bm_title"];
答案 2 :(得分:-4)
尝试改变:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
使用:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];