2

我在将 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 都被添加了不止一次。这是一个结果结果

任何帮助表示赞赏!

4

3 回答 3

0

在开始时,- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath您必须删除子视图。

for(UIView* vista in cell.contentView){
    [vista removeFromSuperview];
}

就这样。

PD:检查删除的视图是否正确。

于 2013-10-02T19:32:43.800 回答
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"];
于 2013-10-02T19:40:54.023 回答
-4

尝试改变:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

和:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:nil];
于 2013-10-02T19:26:13.173 回答