Ich fand, dass Craigs Antwort für mich nicht funktionierte (auf OS 3.1). Nach einem kleinen Durchforschen habe ich entdeckt, dass die Untersichten von UIActionSheet
tatsächlich von einer undokumentierten Klasse UIThreePartButton
Wie auch immer, das funktioniert für mich (implementiert als Teil der UIActionSheetDelegete
-Methode)
Ich hoffe, dass das jemand anderem hilft, obwohl ich Ed Martys Frage, ob es besser wäre, diese Knöpfe aus dem Action Sheet ganz wegzulassen, statt dies zu tun. Wie immer bei der Verwendung undokumentierter Funktionen besteht die Gefahr einer Ablehnung des App-Stores, obwohl dieser Code fehlerfrei geschrieben wird, wenn Apple die APIs in einer zukünftigen OS-Version erneut einsetzt.
Gibt es einen Umstand, der sich ändern kann, während das Aktionsblatt geöffnet ist, was dazu führen könnte, dass die Schaltfläche aktiviert wird? Wenn nicht, denke ich, dass es besser ist, die Schaltflächen zu ändern, die das Blatt abhängig von Ihrer Bedingung anzeigt.
Ansonsten besteht die einzige Möglichkeit, dies zu tun, darin, wie in Craig gesagt, die Teilansichten des Blattes zu durchlaufen und nach den UIButton
-Objekten zu suchen. Ich würde jedoch vorsichtig sein, den Titel der Schaltfläche zu verwenden, da der Titel für verschiedene Sprachen lokalisiert werden könnte (und sollte!). Vergleiche mit dem Titel sind also nicht so zuverlässig. Da Sie die Schaltfläche nicht erstellt haben, wissen Sie nicht wirklich, was die tag
oder action
jeder Schaltfläche auch sein würden, also ist das auch ein bisschen schwierig.
Vermutlich werden die Schaltflächen im Array subviews
in der Reihenfolge angezeigt, in der Sie sie für UIActionSheet
angegeben haben. Da dies jedoch nicht dokumentiert ist, gibt es keine Garantie, dass sie in dieser Reihenfolge angezeigt werden in zukünftigen Versionen des Cocoa Touch SDK weiterhin in dieser Reihenfolge erscheinen. Aus diesem Grund würde ich mich hauptsächlich darum kümmern, aus dem App Store abgelehnt zu werden, um nicht dokumentierte Funktionen zu verwenden.
UIActionSheet ist nicht für das Customizing vorgesehen. Es sollte den tatsächlichen Satz verfügbarer Optionen anzeigen. Es sollte nicht die Verfügbarkeit von Schaltflächen im Vordergrund ändern. Entfernen Sie einfach nicht verwendete Schaltflächen oder verwenden Sie stattdessen die benutzerdefinierte Ansicht
Das ist wahrscheinlich ein bisschen spät. Aber die Art, wie ich es herausgefunden habe, ist UIB-Taste (n) zu erstellen und sie hinzuzufügen zur Untersicht UIActionSheet. Stellen Sie sicher, dass diese Schaltflächen oben platziert sind und die zu ersetzenden Standard-UIActionSheet-Schaltflächen vollständig abdecken. Wenn der UIButton über die Standardschaltfläche UIActionSheet platziert wird, hat sein UIResponder Vorrang vor dem UIActionSheet-Button UIResponder. Auf diese Weise können Sie diese Schaltflächen deaktivieren und aktivieren, unabhängig davon, wie Sie sie in Ihrer UIViewController-Logik verwenden möchten. Dies kann eine Alternative zum Zugriff auf private Methoden für das SDK sein (wie oben - UIThreePartButton) und Apple lehnt Ihre App möglicherweise ab. Ich glaube, das entspricht den Apple Richtlinien.
d. Richten Sie UIB-Schaltflächen ein, um nach bestimmten Bedingungen zu aktivieren / deaktivieren.
%Vor%HINWEIS: Dies funktionierte perfekt in einer vorherigen App, die ich gebaut habe.
Wenn Sie die Ansicht zum Aktionsblatt hinzufügen, erhält die Ansicht kein Ereignis. Sie müssen die Ansicht auf die Übersicht des Action-Sheet.
Siehe unten, wie ich eine Schaltfläche mit Touch-up-Ereignis hinzugefügt habe:
%Vor%}
Ich hatte ein ähnliches Problem, als ich ein Action Sheet hatte, das sich aufgrund einiger Bedingungen veränderte. Ich habe die Auswahlmöglichkeiten ausgelassen, die nicht im Aktionsblatt enthalten sind, aber in einigen Fällen habe ich am Ende ein Aktionsblatt mit nur einer Auswahl. Das scheint etwas albern, da ich diese Wahl sofort aktivieren könnte, ohne das Blatt überhaupt anzuzeigen.
Ich möchte jedoch auch, dass Benutzer erfahren, dass das Klicken auf eine bestimmte Schaltfläche auf dem Bildschirm ihnen eine Liste von Auswahlmöglichkeiten gibt, aus denen sie auswählen können. Deshalb möchte ich das Action Sheet auch in Fällen anzeigen, in denen es nur eine Auswahlmöglichkeit gibt. Ich dachte daran, die nicht anwendbaren Optionen zu deaktivieren, anstatt sie aus dem Blatt zu entfernen, aber das fühlte sich auch nicht richtig an.
Mein Fall hängt damit zusammen, dass ich ein Benutzer-Icon in einer benutzerdefinierten unteren Leiste habe. Wenn ich darauf klicke, werden folgende Optionen angezeigt:
Tags und Links objective-c iphone cocoa-touch uikit