[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!
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
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.
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.
Höchstwahrscheinlich möchten Sie in die addTextFieldWithValue
-Methode von UIAlertView
schauen? Fügen Sie den folgenden Code an der Spitze Ihrer Klasse hinzu:
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.
Erklärt, wie man die Anzahl der Spalten einstellt, nicht getestet hat.
%Vor%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.
Dadurch können wir die Methode aufrufen, ohne dass der Compiler eine Warnung ausgibt.
%Vor%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!)
Tags und Links cocoa-touch