15

UISearchBar のスコープバー部分に色を付けることができた人はいますか。tintColor プロパティがありますが、それを設定しても、付属のスコープバー UISegmentedControl には影響しません。バーに色を付けるためのハンドルがありますが、機能していないようです。

for (id subview in searchBar.subviews){
  if([subview isMemberOfClass:[UISegmentedControl class]]){
     UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
    scopeBar.tintColor=UIColorFromRGB(0x990066);
 }
}

乾杯、ニール

4

8 に答える 8

7

これは興味深いことです。スコープ バーは、多少カスタマイズされたセグメント化されたコントロールであることがわかります。

ドキュメントから: UISegmentedControl は、セグメント化されたコントロールのスタイルが UISegmentedControlStyleBar である場合にのみ、このプロパティを使用します。

スコープ バーのセグメント化されたコントロールはUISegmentedControlStyleBar のように見えますが、そうではありません。ドキュメント化されていないスタイルです。

NSLog(@"scope bar style is %d", scopeBar.segmentedControlStyle);
> scope bar style is 7

これを試すと、実際に色合いが設定されますが、お尻のように見えます。

[scopeBar setSegmentedControlStyle:UISegmentedControlStyleBar];
[scopeBar setTintColor: UIColorFromRGB(0x990066)];
> scope bar style is 2

内部的には、これに影響を与えるいくつかのインスタンス変数があります: _segementedControlFlags.style および _barStyle ですが、認可された API をバイパスしない限り、これらをハッキングすることはできません。

最善の行動は、Apple に問題を提起し、将来のリリースに修正が含まれることを期待することです。

于 2009-11-19T03:41:36.540 に答える
4

他の人が議論していることについて、コピーペーストしやすいコードをいくつか示します。

scopeBar.segmentedControlStyle = UISegmentedControlStyleBar; //required for color change
for (id subview in self.searchDisplayController.searchBar.subviews )
{
    if([subview isMemberOfClass:[UISegmentedControl class]])
    {
        UISegmentedControl *scopeBar=(UISegmentedControl *) subview;
        scopeBar.tintColor =  [UIColor blackColor];         
    }
}

ボタンの周りに白いボックスのような領域がある場合は、インターフェイス ビルダーを使用してその色を変更できます。

他の人のように「お尻のように見える」とは言いませんが、理想的でもありません.

于 2010-07-20T00:48:26.163 に答える
1

ScopeBar の色合いを変更するには、次の操作を行うだけです。

以下のコードは C# (Xamarin) です。

SearchController.SearchBar.TintColor = UIColor.Green;
于 2016-11-21T18:50:21.413 に答える
0

ここに画像の説明を入力

スコープバーの色を変更するための色合いを変更します。BarTintColor が異なることに注意してください。これにより、検索バーの色が変わります。

于 2015-02-26T12:17:14.360 に答える
0

スコープバーの色合いを確実に設定できませんでした。

私がやったことは、検索バーを変更することtintColorです...検索モードに移行するまで、スコープバーに一致するデフォルトの色にします。次に、検索をキャンセルするときに元に戻します。

ここで欠けていると思われる箇所の 1 つは、対応するtableViewがタップされたときに発生する遷移であり、検索バーがファーストレスポンダーのステータスを失います。その場合、色は元に戻りません。理由: その色の変化は、検索バーのキャンセル ボタンがクリックされたことに基づいています。

ひざまずく反応:searchBarCancelButtonClicked:呼び出される必要があります (ここで色合いを元に戻します) ... しかし、キャンセルがクリックされていないため、それは正しくありません。「検索が完了しました」タイプの検出が本当に必要です。たぶん、ファーストレスポンダに目を光らせて、UISearchBarがいつその状態に出入りするかを確認してください。

于 2010-02-08T21:52:09.010 に答える
0

この問題 (およびそれほど複雑ではない) に対するもう 1 つの一時的な解決策は、半透明の UIImageView を検索バーとスコープ バーの上に追加し、UIImageView の背景色を目的の色合いに変更することです。

于 2011-01-02T04:31:17.663 に答える