47

アルファベット順のインデックスを持つテーブル ビューがあり、サイド アルファベットを使用してリストをすばやく表示しています。なじみのない人のために、これを使用します:

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

私の問題は、アプリケーションのスキンが黒くなっていることです。そのため、側面のアルファベットが見えにくくなっています。

アルファベットの色を変える方法がわかりません。できれば「白」でお願いします。

4

12 に答える 12

61

最小 iOS バージョンが 6.0 よりも新しい場合は、sectionIndexColor のプロパティを使用できますUITableView

テーブル ビューのインデックス テキストに使用する色。

@property(非アトミック、保持) UIColor *sectionIndexColor

討論:

テーブル ビューでは、ビューの横にインデックスを表示できるため、ユーザーはテーブルの内容をすばやく簡単にナビゲートできます。このプロパティは、この領域に表示されるテキストに使用する色を指定します。


更新日 2014.1.13

インデックスの外観をカスタマイズするのに役立つオープン ソースのサード パーティ ライブラリであるGDIIndexBarを見つけました。

于 2013-08-14T04:21:30.880 に答える
32

残念ながら、インデックスに表示されるテキストの色をカスタマイズすることはできません。最も近いのは、背景色とインデックスのフォントを変更できることです。

Erica Sadun による iPhone Developers cookbook には、UITableViewIndex ビュー (ドキュメント化されていないクラス) にアクセスする方法を示すコードがいくつかあります。お持ちの場合は、本の 175 ページに参​​照先があります。背景色とフォントにアクセスできます。このクラスに関連する非公式ドキュメントは、こちらでご覧いただけます

警告これは文書化されていないクラスの文書化されていない使用であるため、使用には注意が必要です。

これは、小さな変更を加えたクックブックのコード スニペットです。

- (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 ビューにアクセスして、いくつかの面でそれを変更する方法を示しています。ビューにはサブビューがないように見えるため、インデックス タイトルの配列を使用してカスタム描画を行っている可能性があります。

完璧ではありませんが、少しでもお役に立てば幸いです。

ポール

于 2009-04-17T02:44:24.387 に答える
21

これは、UITableView のインターフェイス ビルダーで簡単に変更できます - ドキュメント化されていないクラスを使用する必要はありませんか?

以下のスクリーンショットを参照してください。フォントの色と背景色も変更できることがわかります。ジョブはいいですね!

于 2014-06-25T10:22:50.217 に答える
11

次のコードの使用に成功しました。

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

これは正常に機能します-Mooglasの回答と非常に似ていますが、「UITableViewIndex」という単語の使用は控えています。

于 2012-05-02T11:37:54.147 に答える
11

私は同じ問題を抱えていて、これを行う方法を見つけましたが、これは文書化されていないクラスとメソッドを使用しているため、App Store にアップロードする前にもう一度考えてください. 私はこれを iOS5 でしか試していないので、以前のバージョンで動作するかどうかはわかりません。

Erica Saunders のクックブックの例を借りて変更し、テキストの色を赤に変更しました。

- (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...

}
于 2011-10-25T10:14:22.087 に答える
9

tableView の色合いを設定できます。

[[UITableView appearance] setTintColor:[UIColor purpleColor]];
于 2013-11-06T11:33:54.877 に答える
4

インデックスのアルファベットの色を変える方法があります。

ヘッダー ファイルで、UITableView をプロパティとして宣言します。

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

次に、実装ファイルの viewDidAppear で、次の行を使用します。

//Change the color of the UITableView index color
_mainTable.sectionIndexColor = [UIColor blackColor];
于 2014-11-04T15:47:08.340 に答える
1

代替タイトル ラベルを含む可変配列を作成します。

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

@" " の配列を返します。引用符の間のスペースの数によってハイライトされたスクローラーの幅が決まります。「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;
}

それが役立つことを願っています。完璧ではない 自分で修正する気にならない 主な問題は、最後のラベルの間隔が均一でないことです。

于 2009-04-18T21:28:52.833 に答える
-2

文書化されていないフォント変更の Swift 版:

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")
            }
        }
    }
于 2015-09-17T08:37:15.907 に答える