2010-05-10 46 views
0

在描述問題之前,讓我先指出這是一個與this question不同的問題。UITableViewCellSeparatorStyleNone在UITableView中選擇時不隱藏藍色分隔線

的問題

This screenshot是採取定在的tableView一休:didSelectRowAtIndexPath方法:和你可以在模擬器(最右邊的圖像)看到,還有在單個像素的藍線所選單元格的底部。這不是客戶要求的設計,也不是這個應用程序用來表現的行爲:即使在選擇時也不應該有分隔符。

我是怎麼來的 我會使用自定義的UITableViewCell類與相應的筆尖(的.xib)文件最初設計此表視圖,並與選擇任何麻煩:根據需要分隔被隱藏。可以預見的是,由於視圖層次結構的所有開銷,滾動緩慢,因此我重新定製了自定義單元格以使用Loren Brichter的fast scrolling solution。現在滾動速度要快得多,但我無法擺脫我生命中的分隔符。

我已經試過

在上面的截圖的時間...

  • 表視圖在IB 「分離器[無]」。
  • 包含表視圖的UIViewController有這一行viewDid負載:self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

正如你可以在截圖中看到,我插入一些未使用的線路,以證明所期望separatorStyle設置。其他測試證實tableView和self.tableView是在同一個斷點處的等價指針。

我也嘗試將tableView.separatorColor設置爲黑色並清除,所有結果都一樣:單元格向右看,直到做出選擇。


Manjunath:這是我用來繪製替代背景的代碼,取決於單元格是否被觸摸。你可以在屏幕截圖中看到不同之處 - 動畫時不那麼微妙。

if(self.highlighted) { 
    textColor = [UIColor blackColor]; 
    UIImage *bg = [UIImage imageNamed:@"image-cell-background_highlighted.png"]; 
    [bg drawAtPoint:CGPointMake(0.0, 1.0)]; 
} 
else { 
    UIImage *bg = [UIImage imageNamed:@"image-cell-background.png"]; 
    [bg drawAtPoint:CGPointMake(0.0, 0.0)]; 
} 

這被稱爲UIImageCell.m在drawContentView:,從Brichter先生的ABTableViewCell超類繼承的方法。

回答

2

克里斯,

鑽研ABTableViewCell,我看到:

- (void)setFrame:(CGRect)f 
{ 
[super setFrame:f]; 
CGRect b = [self bounds]; 
b.size.height -= 1; // leave room for the seperator line 
[contentView setFrame:b]; 
} 

由於電池的高度是一個像素比實際電池中,當電池被選中短,那一個像素線會滲透到選擇顏色的顏色中。它可能看起來像是分隔符,但它實際上是選擇顏色。

要測試,請嘗試將上面的那條線更改爲兩個像素或更短,以查看會發生什麼。

更新:

這樣調整到FastScrollingExample項目的-rootViewController

- (void)viewDidLoad 
{ 
self.title = @"Fast Scrolling Example"; 
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    [super viewDidLoad]; 
} 

和註釋掉:

// if(self.selected) 
// { 
// backgroundColor = [UIColor clearColor]; 
// textColor = [UIColor whiteColor]; 
// } 
// 
-drawContentView

模仿,如果你沒有,會發生什麼有選擇顏色顯示,然後我得到這樣的屏幕截圖:

alt text http://files.me.com/mahboud/7k656q

看起來很熟嗎?

你會如何解決這個問題?如果您不需要選擇單元格,則禁用單元格選擇。否則,如果您正在選擇單元格,則應將該矩形設置得更大,以便在使用-drawConentRect中的自己的選擇顏色進行繪製時,默認選擇顏色不會顯示。

+1

啊,謝謝Mahboud!我正在尋找我或蘋果的原因,但它在ABTableViewCell中。評論這條線是不可能的! '// b.size.height - = 1; //爲分隔線留下空間 – clozach 2010-05-13 15:47:52

1

試試這個: [cell setSelectionStyle:UITableViewCellSelectionStyleNone];

// Customize the appearance of table view cells. 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 

     static NSString *CellIdentifier = NSLocalizedString(@"Cell",@""); 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (nil == cell) 
     { 
     cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 
     } 
     [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
     return cell; 
    } 
+0

UITableViewCellSelectionStyleNone有副作用,使得我的繪圖代碼中的if語句從不計算爲YES。 (請參閱上面的附加代碼塊。) 雖然我更喜歡在這裏使用未經過修改的圖形,但您的解決方案至少會以UITableViewCellSelectionStyleGray的形式提供較少突兀的選擇重疊。謝謝,Manjunath! – clozach 2010-05-10 06:53:01

相關問題