Ich habe in IB eine Symbolleiste mit mehreren Schaltflächen erstellt. Ich möchte in der Lage sein, eine der Schaltflächen abhängig vom Status der Daten im Hauptfenster auszublenden / anzuzeigen.
UIBarButtonItem
hat keine versteckte Eigenschaft, und alle Beispiele, die ich bisher gefunden habe, um sie auszublenden, beinhalten das Setzen von Navigationsleistenschaltflächen auf Null, was ich hier nicht tun möchte, da ich die Schaltfläche möglicherweise erneut anzeigen muss (nicht Um das zu erwähnen, wenn ich meine Schaltfläche mit einem IBOutlet verbinde, wenn ich das auf Null setze, bin ich mir nicht sicher, wie ich es zurückbekommen würde.
ios
uibarbuttonitem
uitoolbar
Sasha
quelle
quelle
Antworten:
Speichern Sie Ihren Button in einer starken Steckdose (nennen wir ihn
myButton
) und tun Sie dies, um ihn hinzuzufügen / zu entfernen:Da es in der Steckdose gespeichert ist, behalten Sie einen Verweis darauf, auch wenn es nicht in der Symbolleiste enthalten ist.
quelle
Ich weiß, dass diese Antwort für diese Frage zu spät ist. Es kann jedoch hilfreich sein, wenn sich jemand in einer ähnlichen Situation befindet.
In iOS 7 können Sie zum Ausblenden eines Balkenschaltflächenelements die folgenden zwei Techniken verwenden:
SetTitleTextAttributes
: - Dies funktioniert hervorragend bei Balkenschaltflächenelementen wie "Fertig", "Speichern" usw. Es funktioniert jedoch nicht bei Elementen wie Hinzufügen, Papierkorbsymbol usw. (zumindest nicht für mich), da es sich nicht um Texte handelt.TintColor
: - Wenn ich ein Balkenschaltflächenelement mit dem Namen "deleteButton" habe: -Um die Schaltfläche auszublenden, habe ich den folgenden Code verwendet: -
Um die Schaltfläche wieder anzuzeigen, habe ich den folgenden Code verwendet: -
quelle
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
Deaktivieren und Ausblenden sowiedeleteButton.enabled = true; deleteButton.tintColor = nil
erneutes Aktivieren und Anzeigen wie gewohnt.UIColor.clear
fürUIControlState.disabled
und kann ein- / auszublenden die Schaltfläche mitsetEnabled
. Wie Sie bereits sagten, funktioniert dies natürlich nur für Textschaltflächen.Hier ist ein einfacher Ansatz:
Ich habe es gerade auf meinem Retina-iPad ausgeführt und .01 ist klein genug, damit es nicht angezeigt wird.
quelle
self.window?.tintColor = APP_PRIMARY_COLOR
in appdelegate festgelegt haben, funktioniert dies nichtEs ist möglich, eine Schaltfläche an Ort und Stelle auszublenden, ohne ihre Breite zu ändern oder sie aus der Leiste zu entfernen. Wenn Sie den Stil auf "Einfach" setzen, den Titel entfernen und die Schaltfläche deaktivieren, wird er ausgeblendet. Um es wiederherzustellen, kehren Sie einfach Ihre Änderungen um.
quelle
Unten ist meine Lösung, obwohl ich nach Navigationsleiste gesucht habe.
Hier ist "navBar" ein IBOutlet zur NavigationBar in der Ansicht in XIB. Hier wollte ich die Schaltfläche ausblenden oder anzeigen, basierend auf einer bestimmten Bedingung. Also teste ich auf die Bedingung in "If" und wenn true, setze ich die Schaltfläche in der viewDidLoad-Methode der Zielansicht auf null.
Dies ist möglicherweise nicht genau für Ihr Problem relevant, aber etwas Ähnliches, wenn Sie Schaltflächen in der Navigationsleiste ausblenden möchten
quelle
rightBarButtonItem
erneut festlegen möchten , stellen Sie sicher, dass das Schaltflächenelement in einem starken IBOutlet gespeichert ist, damit es nicht freigegeben wird, wenn Sie es aus der Navigationsleiste entfernen.Für Swift 3 und Swift 4 können Sie Folgendes tun, um Folgendes auszublenden
UIBarButtomItem
:Und um das zu zeigen
UIBarButtonItem
:Auf der
tintColor
müssen Sie die Ursprungsfarbe angeben, die Sie für die verwendenUIBarButtomItem
quelle
Ich verwende derzeit OS X Yosemite Developer Preview 7 und Xcode 6 Beta 6 für iOS 7.1 und die folgende Lösung funktioniert gut für mich:
UINavigationItem
undUIBarButtonItem
s erstellenFühren Sie den folgenden Code aus, um ihn zu entfernen
Führen Sie die folgenden Codes aus, um erneut Schaltflächen hinzuzufügen
quelle
Ich habe IBOutlets in meinem Projekt verwendet. Meine Lösung war also:
Und wenn Sie diese Leiste erneut anzeigen müssen, legen Sie einfach die umgekehrten Eigenschaften fest.
Verwenden Sie in Swift 3 stattdessen
enable
dieisEnable
Eigenschaft.quelle
self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
quelle
iOS 8. UIBarButtonItem mit benutzerdefiniertem Bild. Versuchte viele verschiedene Wege, die meisten halfen nicht. Max 'Lösung, die
setTintColor
sich nicht in eine Farbe änderte. Ich habe das selbst herausgefunden und dachte, es wird jemandem von Nutzen sein.Zum Verstecken:
Zum Zeigen:
quelle
Versuchen Sie es in Swift . Aktualisieren Sie das nicht,
tintColor
wenn Sie ein Design für Ihr UIBarButtonItem wie die Schriftgröße in AppDelegate haben. Dadurch wird das Erscheinungsbild Ihrer Schaltfläche beim Anzeigen vollständig geändert.Im Falle einer Textschaltfläche kann das Ändern des Titels dazu führen, dass Ihre Schaltfläche "verschwindet".
quelle
Ich entdeckte eine andere Falte in der
tintColor
undisEnabled
nähern von Max und andere vorgeschlagen - wenn Voiceover für die Barrierefreiheit aktiviert ist und der Knopf ist logisch versteckt, noch die Zugänglichkeit Cursor auf der Bar - Taste konzentrieren, und erklären , dass es „gedimmt“ (dh daisEnabled
heißt auf false gesetzt). Der Ansatz in der akzeptierten Antwort leidet nicht unter diesem Nebeneffekt, aber eine andere Lösung, die ich gefunden habe, war,isAccessibilityElement
beim "Ausblenden" der Schaltfläche auf "falsch" zu setzen :Und dann
isAccessibilityElement
zurück auf true setzen, wenn die Schaltfläche "angezeigt" wird:In meinem Fall war es kein Problem, dass das Balkenschaltflächenelement immer noch Platz beansprucht, da wir die am weitesten links liegenden rechten Balkenschaltflächenelemente versteckt / angezeigt haben.
quelle
Und jetzt einfach das
isHidden
Eigentum wechseln .quelle
Verbesserung von @lnafziger Antwort
Speichern Sie Ihre Barbuttons in einer starken Steckdose und tun Sie dies, um sie zu verbergen / anzuzeigen :
Wenn jemals erforderlich, verwenden Sie unten Funktion ..
quelle
Einfach einstellen
barButton.customView = UIView()
und den Trick sehenquelle
Es gibt keine Möglichkeit, ein UIBarButtonItem zu "verbergen". Sie müssen es aus der SuperView entfernen und wieder hinzufügen, wenn Sie es erneut anzeigen möchten.
quelle
Dies ist ein langer Weg in der Antwortliste, aber nur für den Fall, dass jemand ein einfaches Kopieren und Einfügen für die schnelle Lösung wünscht, hier ist es
quelle
Eine Möglichkeit, dies zu tun, besteht darin, die
initWithCustomView:(UIView *)
Eigenschaft von bei der Zuweisung von zu verwendenUIBarButtonItem
. Die Unterklasse fürUIView
hat die Eigenschaft zum Ein- und Ausblenden.Beispielsweise:
1. Haben Sie eine,
UIButton
die Sie ein- / ausblenden möchten.2. Machen Sie die
UIButton
als benutzerdefinierte Ansicht. Mögen :3. Sie können das, was
myButton
Sie erstellt haben, ein- und ausblenden .[myButton setHidden:YES];
quelle
Für die Swift-Version ist hier der Code:
Für
UINavigationBar
:quelle
Das Einstellen der Textfarbe auf eine klare Farbe, wenn das Balkenschaltflächenelement deaktiviert ist, ist wahrscheinlich eine sauberere Option. Es gibt keine Verrücktheit, die Sie in einem Kommentar erklären müssen. Außerdem zerstören Sie die Schaltfläche nicht, sodass Sie die zugehörigen Storyboard-Abschnitte beibehalten.
Wann immer Sie möchten, dass das Balkenschaltflächenelement ausgeblendet wird, können Sie einfach Folgendes tun:
Es ist lahm, dass es keine versteckten Eigenschaften gibt, aber dies bietet das gleiche Ergebnis.
quelle
Falls das UIBarButtonItem ein Bild anstelle des Textes enthält, können Sie dies tun, um es auszublenden:
navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;
quelle
Einige Hilfsmethoden, von denen ich dachte, ich würde sie basierend auf der akzeptierten Antwort von lnafziger teilen, da ich jeweils mehrere Symbolleisten und mehrere Schaltflächen habe:
quelle
Sie können die Ansicht leicht abrufen und auf diese Weise ausblenden
quelle
Wenn Sie Swift 3 verwenden
quelle
Hier ist eine Erweiterung, die dies erledigt.
VERWENDUNG:
quelle
Ergänzend zu Eli Burkes Antwort
UIBarButtonItem
können Sie den folgenden Code verwenden , wenn Sie ein Hintergrundbild anstelle eines Titels haben:quelle
Sie müssen das Array toolbar.items bearbeiten.
Hier ist ein Code, den ich zum Ausblenden und Anzeigen einer Schaltfläche "Fertig" verwende. Befindet sich Ihre Schaltfläche am äußersten Rand der Symbolleiste oder zwischen anderen Schaltflächen, bewegen sich Ihre anderen Schaltflächen. Wenn Sie also möchten, dass Ihre Schaltfläche einfach verschwindet, platzieren Sie Ihre Schaltfläche als letzte Schaltfläche in Richtung Mitte. Ich animiere die Tastenbewegung für den Effekt, es gefällt mir sehr gut.
}}
Verwenden Sie jetzt den folgenden Code, um Ihre Schaltfläche anzuzeigen
oder um deine Schaltfläche auszublenden
quelle
Wenn Sie in IB den Titel der Schaltfläche leer lassen, wird er nicht angezeigt (nie initialisiert?). Ich mache dies häufig während der Entwicklung während der UI-Updates, wenn ein Balkenschaltflächenelement für einen Build vorübergehend ausgeblendet werden soll, ohne es zu löschen und alle seine Outlet-Referenzen zu löschen.
Dies hat zur Laufzeit nicht den gleichen Effekt. Wenn Sie den Titel der Schaltfläche auf Null setzen, wird nicht die gesamte Schaltfläche ausgeblendet. Entschuldigung, beantwortet Ihre Frage nicht wirklich, kann aber für einige nützlich sein.
Bearbeiten: Dieser Trick funktioniert nur, wenn der Stil der Schaltfläche auf "Einfach" eingestellt ist
quelle
Ich werde meine Lösung hier hinzufügen, da ich sie hier noch nicht finden konnte. Ich habe eine dynamische Schaltfläche, deren Bild vom Status eines Steuerelements abhängt. Die einfachste Lösung für mich war, das Bild auf einzustellen,
nil
wenn das Steuerelement nicht vorhanden war. Das Bild wurde jedes Mal aktualisiert, wenn das Steuerelement aktualisiert wurde, und daher war dies für mich optimal. Nur um sicherzugehen auch stelle ich dasenabled
anNO
.Das Festlegen der Breite auf einen minimalen Wert funktionierte unter iOS 7 nicht.
quelle
Mit freundlicher Genehmigung von @lnafziger, @MindSpiker, @vishal, et. al,
Der einfachste Liner, zu dem ich für eine einzelne rechte (oder linke) Balkentaste gekommen bin, ist:
Wie in:
Ich habe dies getestet und es funktioniert für mich (mit dem über IB verdrahteten starken Balkenknopfelement).
quelle