2009-04-15 72 views
45

我有一個帶有英文字母索引的表格視圖,並且使用側面字母表快速瀏覽列表。對於那些不熟悉的人來說,使用這個:如何更改索引UITableView中邊字母的顏色?

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { 

我的問題是,我的應用程序剛被剝黑。所以現在很難看到側面的字母。

我想不出如何改變字母表的顏色。如果可能的話,我希望它是「白色」。

回答

32

從我可以告訴的是,不可能自定義索引中顯示的文本的顏色,最近我已經能夠修改背景顏色和索引的字體。

Erica Sadun在iPhone Developers食譜中有一些代碼,它展示瞭如何訪問UITableViewIndex視圖(一個未公開的類)。如果有,請參閱本書第175頁的參考資料。它可以訪問背景顏色和字體。你可以看到一個與此類here有關的非官方文件。

警告這是無證使用無證類,所以你需要謹慎使用它。

這裏是稍作修改食譜的代碼片段:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {  

    for(UIView *view in [tv subviews]) 
    { 
    if([[[view class] description] isEqualToString:@"UITableViewIndex"]) 
    { 

     [view setBackgroundColor:[UIColor whiteColor]]; 
     [view setFont:[UIFont systemFontOfSize:14]]; 
    } 
    } 

    //rest of cellForRow handling... 

} 

這說明你如何訪問和UITableViewIndex查看和修改它在某些方面。它看起來像該視圖沒有任何子視圖,因此它可能使用索引標題數組進行一些自定義繪圖。

這不是完美的,但希望它有一點幫助。

保羅

+3

上述迭代可以在該方法中實現: - (void)viewDidAppear:(BOOL)animated; 這將避免每次滾動tableView時重複迭代。 – 2011-08-02 19:58:36

+1

這種方法只是改變了索引的背景顏色。如果我只想改變字體的顏色而不改變其背景,該怎麼辦? – 2011-10-20 06:40:03

+1

@DDDhingani改變字體的顏色(在這個例子中爲紅色),使用:[view performSelector:@selector(setIndexColor :) withObject:[UIColor redColor]]; – rahzark 2013-09-26 14:42:12

1

製作一個可變數組以包含備用標題標籤 在

-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView 

返回的陣列@」「,其中的引號之間的空間的數量決定了HI-的寬度點燃滾動。 讓「sectionIndexTitlesForTableView」調用更新標籤函數。 在該函數中,刪除先前從其超級視圖中創建的數組中的所有標籤然後創建並添加許多標籤。然後將它們添加到表格的超級視圖中。

這些是將標籤放置在正確位置所需的線。

rect.origin.x = table.frame.origin.x+table.frame.size.width-rect.size.width-2; 
rect.origin.y = 5+table.frame.origin.y+counter *(280-rect.size.height-([customIndexLabels count]-1))/([customIndexLabels count]-1); 
if ([customIndexLabels lastObject]==thisLabel) 
{ 
    rect.origin.y-=10; 
} 

希望有幫助。這並不完美我只是不在乎自己修復它 主要問題是最後一個標籤的間距不均勻。

11

我遇到了同樣的問題,只是發現了一個這樣做的方法,雖然這是使用未記錄的類和方法,所以在嘗試將其上傳到App Store之前多想一段時間。 我應該說,我只用iOS5試過,所以我不知道它是否適用於以前的版本。

我借用並修改了埃裏卡·桑德斯食譜例如,以便它現在改變文字顏色爲紅色:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {  

    for(UIView *view in [tv subviews]) 
    { 
    if([[[view class] description] isEqualToString:@"UITableViewIndex"]) 
    { 
     [view performSelector:@selector(setIndexColor:) withObject:[UIColor redColor]]; 
    } 
    } 

    //rest of cellForRow handling... 

} 
11

我們已經成功地使用下面的代碼:

for(UIView *view in [tableView subviews]) { 
    if([view respondsToSelector:@selector(setIndexColor:)]) { 
     [view performSelector:@selector(setIndexColor:) withObject:[UIColor whiteColor]]; 
    } 
} 

工作正常 - 它與Mooglas的答案非常相似 - 但是避免使用單詞「UITableViewIndex」。

59

如果您的最低iOS版本比6.0更新,您可以使用sectionIndexColorUITableView的財產。

用於表格視圖索引文本的顏色。

@屬性(非原子,保留)的UIColor * sectionIndexColor

討論:

表視圖可以顯示沿着視線的側面上的索引,使得它 用戶更方便地瀏覽表的內容很快。此 屬性指定用於顯示在此區域中的文本的顏色。


更新日期2014年1月13日

我找到一個開源的第三方庫:GDIIndexBar幫助自定義索引的外觀。

8

您可以設置tableView的色調顏色。

[[UITableView appearance] setTintColor:[UIColor purpleColor]]; 
3

這是我找到的最好的解決方案,用於調整側面的索引欄的背景顏色。它適用於iOS7和iOS6。

添加到您的viewDidLoad

if ([_tableView respondsToSelector:@selector(setSectionIndexColor:)]) { 
    _tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 
    _tableView.sectionIndexTrackingBackgroundColor = [UIColor whiteColor]; 
} 

第一個是默認的顏色,二是當你正在滾動的背景色。

21

這可以很容易地在UITableView的界面生成器中進行更改 - 無需使用未記錄的類?

請看下面的截圖,你可以看到字體顏色和背景顏色也可以改變。約伯是個好人!

4

有更改索引字母的顏色的方法。

在你的頭文件,聲明你的UITableView作爲一個屬性:

@property (weak, nonatomic) IBOutlet UITableView *mainTable; 

然後在您的實現文件的viewDidAppear,使用以下行:

//Change the color of the UITableView index color 
_mainTable.sectionIndexColor = [UIColor blackColor]; 
16

對於iOS7或更高版本:

self.tableView.sectionIndexColor = [UIColor whiteColor]; 
self.tableView.sectionIndexBackgroundColor = [UIColor clearColor]; 
-1

無證字體更改的快速版:

extension NSObject { 

    class func objectClassName() -> String { 

     let classLongName = reflect(self.self).summary; 

     let tokens = classLongName.componentsSeparatedByString(".") 

     if let typeName = tokens.last { 

      return typeName 
     } 

     return NSStringFromClass(self.dynamicType) 
    } 
} 

func changeSectionIndexFont(tableView: UITableView) -> Void { 

     let realSubviews = tableView.subviews as! [UIView] 

     for subview in realSubviews { 

      if subview.dynamicType.objectClassName() == "UITableViewIndex" { 

       subview.setValue(UIFont(name: "OpenSans", size: 10), forKey: "font") 
      } 
     } 
    }