Я использую UITableView, и я замечаю, что ячейки в моем табличном представлении становятся все более и более смелыми, когда я прокручиваю, это перезаписывает содержимое, и я хочу остановить это, но не могу видеть, где я иду неправильно.
В моем UITableView, по какой-то причине, когда я прокручиваю содержимое табличного представления, путаются с созданным вручную UILabel.
Мне требуется UILabel вручную, потому что позже мне понадобятся пользовательские ячейки.
По мере того, как я прокручиваю вверх и вниз, метки становятся все ярче и смелее; они всегда перекрывают друг друга, а иногда даже влияют на строки, расположенные ниже (даже до того, как они появятся в области просмотра).
Если я продолжу это делать, содержимое клетки станет непонятным.
Это происходит, только если там backgroundColor не установлен как clearColor
.
Я пытался [cellLabel setClearsContextBeforeDrawing:YES];
и [self.tableView setClearsContextBeforeDrawing:YES];
безрезультатно.
Если я использую cell.textLabel.text
, проблема, похоже, исчезнет.
Ниже приведен код и пример изображения.
// Simple table view
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell...
//[self configureCell:cell atIndexPath:indexPath];
NSString *txt = @"Product";
//cell.textLabel.text = txt;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
UIView *cellView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, cell.frame.size.height)];
UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 120, 35)];
[cellLabel setText:txt];
[cellLabel setFont:[UIFont boldSystemFontOfSize:12]];
[cellLabel setBackgroundColor:[UIColor clearColor]];
[cellView addSubview:cellLabel];
[cellLabel release];
[cell.contentView addSubview:cellView];
[cellView release];
return cell;
}
Image follows;
![image of uitableview][1]
[1]: http://i.stack.imgur.com/5lNy6.png
// Edit to include context
I am using a dictionary to display the contents of the UITableViewCells.
I have attempted to do the following;
- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[self configureCell:cell atIndexPath:indexPath];
} // end if
// Configure the cell...
//
// Moved to inside the cell==nil
return cell;
}
-(void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath
{
// Get the txt from the Dictionary/Plist... *removed due verboseness*
UILabel *cellLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 120, 35)];
[cellLabel setText:txt];
[cellLabel setFont:[UIFont boldSystemFontOfSize:12]];
[cellLabel setBackgroundColor:[UIColor clearColor]];
[cell.contentView addSubview:cellLabel];
[cellLabel release];
}
Это, хотя и решает проблему перезаписи - это вызывает проблему - это заставляет метки неоднократно появляться в совершенно случайных местах - ниже приведен только пример, другие поля и метки также повторяются.
Смотри картинку ниже;