2014-01-31 89 views
1

好吧,也許我太挑剔了。如果你看不到它,提前道歉,但在第二張圖片中,行中的項目有點像素化,或者好像一個詞放在一個單詞的頂部。這隻發生在我向上滾動tableview之後,否則,它與第一個圖像相似。UITableview項目滾動後變粗體

第一張圖:

http://oi61.tinypic.com/308grjc.jpg

第二張圖(你可以在這裏看到在字體的差異):http://oi61.tinypic.com/2mqpbb9.jpg

它更大膽出位和不登大雅之堂,一旦我向上滾動。

我坦率地不知道爲什麼。 tableview正在正常加載。任何幫助,預感或建議都會非常相關,即使它可以指向正確的區域。

這是第二張圖片的tableview代碼。

static NSString *CellIdentifier = @"OrderProductCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 

} 

//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 


//configure cell, display name and cost of each item 
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; 

UILabel *lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; 
lableName.backgroundColor=[UIColor clearColor]; 
lableName.font=[UIFont boldSystemFontOfSize:19]; 
[lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; 
lableName.text=p.name; 

//UILabel *counterNumber=[[UILabel alloc]initWithFrame:CGRectMake(10, 25, 300, 20)]; 
//counterNumber.backgroundColor=[UIColor clearColor]; 
//counterNumber.font=[UIFont systemFontOfSize:12]; 
//counterNumber.text=[NSString stringWithFormat:@"Scan time :%@",p.scannerCounter]; 
[cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %.02f",p.currency, p.cost]]; 
cell.imageView.image = [UIImage imageNamed:p.image]; 
[cell addSubview:lableName]; 
//[cell release]; 
//[cell addSubview:counterNumber]; 
return cell; 
+0

顯示'cellForRowAtIndexPath'方法的代碼。 – rmaddy

+0

@rmaddy添加了它。 – user3255500

+0

不直接將標籤添加到單元格,將其添加到單元格的內容視圖 –

回答

2

發生這種情況,因爲你不重用細胞,因此你基本上反覆添加標籤而不是使用已有的標籤。

只要把下面的代碼,如果(細胞==零)內:

static NSString *CellIdentifier = @"OrderProductCell"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
UILabel *lableName; 
if(cell==nil){ 
    // this is where we should initialize and customize the UI elements, 
    // or in this case your label. 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier]; 
    lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; 
    lableName.backgroundColor=[UIColor clearColor]; 
    lableName.font=[UIFont boldSystemFontOfSize:19]; 
    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; 
    [cell addSubview:lableName]; 
} 
// this is where we should assign the value. 
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row];  
lableName.text = p.name; 
/* 
assign other values if any 
... 
*/ 
return cell; 

這樣的lableName不會被一次又一次的,因此不會出現此問題加入到細胞。

重用單元格屬性的最佳方法是初始化和自定義if(cell == nil)中的所有內容,並僅在if條件之外添加該元素的值。

+0

我可以知道這是什麼投票? – Aish

1
  1. 不要添加子視圖直接細胞,將其添加到內容查看電池
  2. 的同時重用你需要先刪除現有的標籤,並添加新的標籤或使用現有的細胞,而不是細胞增加一個新的。

更改您的代碼,如:

static NSString *CellIdentifier = @"OrderProductCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
UILabel *lableName = nil; 
if (cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
    lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; 
    lableName.backgroundColor=[UIColor clearColor]; 
    lableName.font=[UIFont boldSystemFontOfSize:19]; 
    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; 
    lableName.tag = 7; 
    [cell.contentView addSubview:lableName]; 
} 


//configure cell, display name and cost of each item 
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; 
lableName = (UILabel *)[cell.contentView viewWithTag:7]; 
lableName.text=p.name; 

[cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %.02f",p.currency, p.cost]]; 
cell.imageView.image = [UIImage imageNamed:p.image]; 

return cell; 
+0

非常感謝你的幫助。我已經設法使用以下鏈接修復它,請讓我知道我的方法的缺點是什麼(因爲它現在工作正常,它不夠好嗎?):http://oi57.tinypic.com/2rf79so.jpg – user3255500

+0

@ user3255500:問題是你沒有重用單元。您每次都在創建單元格。所以如果你有很多單元,它會降低性能。第二個是你每次創建單元,所以你不需要這個'dequeueReusableCellWithIdentifier:'調用,並且不需要if..else條件(因爲你在這兩種情況下都做同樣的事情) –

+0

明白了。說得通。謝謝您的幫助 ! – user3255500

1

兩個1號線和2號線都在做同樣的設置字體

lableName.font=[UIFont boldSystemFontOfSize:19]; // line 1 

    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // line 2 

    [cell.contentView addSubview:lableName]; 

    UILabel *lableName = nil; 

//Inside your cellForRowAtIndexPath put this code 
static NSString *CellIdentifier = @"OrderProductCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 

} 

//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 


//configure cell, display name and cost of each item 
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row]; 
    if (cell == nil) 
    { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
    lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)]; 
    lableName.backgroundColor=[UIColor clearColor]; 
    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // set fonts only once 
    [cell.contentView addSubview:lableName]; 
    } 
+0

嗨bhavya,thnx 4的幫助。如果你能評論我的解決方案的不同/消極性,解決這個問題,我會很感激你的。 http://oi57.tinypic.com/2rf79so.jpg – user3255500

相關問題