Frage

Hat jemand den scopebar Teil eines UISearchBar einzufärben verwaltet, hat es eine tintColor Eigenschaft, aber es hat keinen Einfluss auf die beigefügten scopebar UISegmentedControl Einstellung. Ive bekam einen Griff an der Bar es tönen, aber tut also zu funktionieren scheint:

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

Cheers, Neil

War es hilfreich?

Lösung

Das ist interessant, stellt sich heraus, der Umfang bar eine etwas angepasst segmentierte Kontrolle ist.

Aus der Dokumentation:. UISegmentedControl verwendet diese Eigenschaft nur, wenn der Stil des segmentierten Steuer ist UISegmentedControlStyleBar

Nun ist die Rahmen bar Kontrolle segmentiert sieht wie UISegmentedControlStyleBar aber nicht der Fall, es ist einige undokumentierte Stil:

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

Sie können dies versuchen, die tatsächlich den Farbton nicht eingestellt, aber es sieht aus wie Esel:

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

Intern gibt es einige Instanzvariablen beeinflussen diese: _segementedControlFlags.style und _barStyle aber Sie können diejenigen, die nicht hacken, wenn Sie die sanktioniert API umgehen

.

Die beste Vorgehensweise ist es mit Apple zu erhöhen und hofft, dass sie ein Update in einer zukünftigen Version enthalten.

Andere Tipps

Die oben genannten Ansätze wurden nicht für mich arbeiten und ich am Ende eines iOS Aussehen Verfahren.

[[UISegmentedControl appearanceWhenContainedIn:[UISearchBar class], nil] setTintColor:[UIColor whiteColor]];

Hier einige Kopie für freundliche Code einfügen, was die anderen zu diskutieren.

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];         
    }
}

Wenn Sie ein weißes Feld wie Bereich um die Tasten, können Sie die Farbe, dass durch Interface Builder ändern.

Ich würde nicht sagen, dass es „wie Esel“ sieht aus, als die andere tun, aber es ist auch nicht wirklich ideal.

Sie einfach die folgenden Schritte aus dem den Farbton von ScopeBar zu ändern:

Der Code unten ist in C # (Xamarin)

SearchController.SearchBar.TintColor = UIColor.Green;

Ich habe nicht konnte den Farbton zuverlässig für einen Bereich bar eingestellt erhalten.

Was ich tun am Ende verändert die tintColor der Suchleiste ... UNTIL in den Suchmodus übergeht, an welcher Stelle ich es die Standardfarbe machen den Umfang bar entsprechen. Dann, wenn die Suche Cancelling, ändere ich es zurück.

Eine Stelle, die ich hier scheinen zu fehlen, ist der Übergang, wenn der entsprechende tableView auftritt abgegriffen wird, die Suchleiste verursacht ersten Responder-Status zu verlieren. In diesem Fall wird die Farbe nicht wieder ändern. Grund: Ich stütze diese Farbänderung auf, die die Löschtaste der Suchleiste geklickt wird,

.

Kurzschlussreaktion: searchBarCancelButtonClicked: sollte aufgerufen werden (wobei wir den Farbton ändern zurück) ... aber das kann nicht richtig sein, weil Abbrechen wurde nicht angeklickt. Ich brauche wirklich eine „Search is done“ Art der Detektion. Vielleicht nur ein Auge auf First Responder und sehen Sie, wenn Sie UISearchBar bewegt sich in und aus diesem Zustand?

Eine weitere Band-Aid-Lösung für dieses Problem (und weniger kompliziert) ist es, Sie eine halbtransparente UIImageView über die oberen Teil der Suchleiste und Scope Leiste hinzufügen könnten und die Hintergrundfarbe des UIImageView zu Ihrer gewünschten Farbton Farbe ändern .

eingeben Bild Beschreibung hier

Ändern Sie den Farbton Farbe für Farbe des Bereichs bar zu ändern. Hinweis BarTintColor ist anders - das die Farbe der Suchleiste ändern wird ..

Diese Lösung ist in Swift, kann zu Objective-C angepasst werden. Sie können die segmentierten Steuerungssicht mit folgenden Funktion finden

func findSegmentedControl(view : UIView) -> UIView? {
    for v in view.subviews {
        if v is UISegmentedControl {
            print(v)
            return v
        } else {
            if let found = findSegmentedControl(view : v) {
                return found
            }
        }
    }
    return nil
}

und dann Farbton Farbe der Ansicht festgelegt. Aufruf dieser Funktion wird so aussehen:

if let segmentedView = findSegmentedControl(view: searchController.searchBar) {                
            segmentedView.tintColor = UIColor.white
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top