将UILabel添加到UITableViewCell的麻烦

时间:2013-10-02 19:18:48

标签: ios uitableview uilabel

将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都被添加了多次。结果为result

感谢任何帮助!

3 个答案:

答案 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];