Wie verschieben Sie die Schaltflächen in einer UIAlertView, um Platz für ein eingefügtes UITextField zu schaffen?

7

[EDIT] Hmm. Vielleicht sollte diese Frage betitelt werden "Wie lautet die Standardbenutzereingabe-Dialogansicht in CocoaTouch?" Ich weiß, dass ich eine ganze Ansicht erstellen kann, die genau das ist, was ich möchte, und sie in einen View-Controller und presentModalView einbinden - aber ich hoffte irgendwie, dass es eine normale, normale Benutzereingabe "Dialog" -Ansicht gab, die kam- mit Kakao-Touch. "Geben Sie Ihren Namen ein", "Geben Sie den zu suchenden Text ein", usw., sind SEHR übliche Dinge!

Wie auch immer ... hier ist die Frage, wie ich sie ursprünglich gestellt habe:

Dieser Code:

%Vor%

Erzeugt diese Alert-Ansicht:

Alert finden http://www.publicplayground.com/IMGs/Misc/FindAlert.png

(Ich begann mit dem Code von diese Frage von emi1Faber , und es funktioniert wie angekündigt, aber wie ich in meinem Kommentar sage, überlagert der Abbrechen-Button das Textfeld.)

Wie kann ich alles neu mischen, damit das Textfeld richtig passt? [findAlert setNeedsLayout] scheint nichts zu tun, auch nachdem ich [findAlert setFrame: tallerFrame]. Hinweise?

Danke!

    
Olie 03.01.2009, 19:03
quelle

8 Antworten

25

Die einfachste (und richtigste) Methode zum Verschieben der Textansicht ist das Hinzufügen einer Nachricht

%Vor%

Der Grund dafür, dass Ihr Bild nicht wirksam wird, ist, dass -show den Rahmen festlegt und die Ansichtshierarchie erstellt, bevor die Animation gestartet wird. Sie sollten auch die Textansicht als ersten Responder markieren, damit die Tastatur erscheint.

Vollständiges Beispiel:

%Vor%

Hinweis: Sie können auch die Subviews von UIAlertView ändern, aber da Apple das Layout von UIAlertView bereits geändert hat, sollten Sie die Klassenbeschreibungen und Frames mit bekannten Werten vergleichen, bevor Sie neue festlegen. Sie können sogar so etwas erhalten:

Vorschau http://booleanmagic.com/uploads/UIAlertViewHack.png

    
rpetrich 05.01.2009, 09:12
quelle
6

Selbst wenn Sie das schaffen können, wird es nicht sehr iPhone-y sein. Das UIAlertView ist wirklich nicht für Benutzereingaben wie dieses gedacht. Wenn Sie in allen Apple-Apps nachsehen, sehen Sie, dass sie eine neue Ansicht verwenden, die mit der presentModalViewController: -Methode von UIViewController angezeigt wird.

Bearbeiten : Dieser Rat ist nicht mehr so ​​wahr wie beim Schreiben. Apple hat in zunehmendem Maße Warnungsansichten als Texteingabefelder verwendet, und iOS5 enthält sogar native Unterstützung, ohne sich mit Ansichten herumärgern zu müssen (siehe alertViewStyle Eigenschaft).

Ich denke, wenn Sie vier Buttons haben müssen, dann ist die Verwendung eines benutzerdefinierten UIViewController wahrscheinlich immer noch der richtige Weg. Aber wenn Sie nur ein Passwort mit OK / Abbrechen-Tasten eingeben möchten, dann ist es in Ordnung.

    
Stephen Darlington 03.01.2009 19:58
quelle
3

Zoul schlug die beste Methode vor, um Benutzereingaben einfach zu erfassen:

a) Fügen Sie Ihrer Klasse das UITextFieldDelegate-Protokoll hinzu.

b) Mach etwas wie

%Vor%

c) Der entscheidende Teil bestand darin, den Delegaten von textField auf self zu setzen, um dann auf Daten zugreifen zu können:

%Vor%

Ich hoffe, das hilft jemandem, da ich ein wenig nachdenken musste, um es richtig zu machen.

    
Goles 26.07.2009 07:46
quelle
1

Höchstwahrscheinlich möchten Sie in die addTextFieldWithValue -Methode von UIAlertView schauen? Fügen Sie den folgenden Code an der Spitze Ihrer Klasse hinzu:

%Vor%

Es ist nicht offiziell, aber IMHO wird es Sie nicht vom App Store zurückgewiesen und es ist viel bessere Lösung, als das Textfeld in den Dialog Yourself zu hacken.

    
zoul 05.01.2009 09:24
quelle
1

Erklärt, wie man die Anzahl der Spalten einstellt, nicht getestet hat.

Ссылка

  

Allerdings gibt es eine private Methode,   setNumberOfRows: (int) n das erlaubt   Sie legen eine maximale Anzahl von Zeilen fest   Zeigen Sie die Tasten an. Um dies zu verwenden   Methode müssen wir unsere eigenen hinzufügen   Erweiterungen der UIAlertView-Klasse. Wir   tun Sie dies, indem Sie ein @ interface für hinzufügen   UIAlertView in unserer .m-Datei.

%Vor%

Dadurch können wir die Methode aufrufen, ohne dass der Compiler eine Warnung ausgibt.

%Vor%     
oden 07.03.2010 14:34
quelle
0

Fügen Sie einige (\ n) s nach dem Titel in der UIAlertView-Initialisierung ein. Das wird die Tasten drücken. Und ich stimme Stephen hier zu. Es besteht die Möglichkeit, dass Apple eine App ablehnt, wenn sie die Steuerelemente so verwendet, wie sie nicht sein sollten. (Es gibt eine Klausel in den Human Interface Guidelines dazu!)

    
lostInTransit 05.01.2009 08:32
quelle
0

Diese einfachere Methode funktioniert für mich:

%Vor%

Ich hoffe, das hilft. Oh, wenn Sie mehrere Tastenreihen benötigen, dann ist es:

%Vor%

Prost

    
Megachan 10.02.2009 14:14
quelle
0

Ссылка

Diese Bibliothek erstellt das Steuerelement tatsächlich von Grund auf, anstatt zu versuchen, UIAlertView zu hacken, was in der Regel ein schlechter Plan (TM) ist

    
P i 18.07.2011 17:47
quelle

Tags und Links