Wie verschieben Sie die Schaltflächen in ein uialertview-Objekt, um Platz zu machen für eine eingelegte UITextField?
[EDIT] Hmm. Vielleicht ist diese Frage sollten die Titel "was ist der standardmäßige Benutzer-Eingabe-dialog-Ansicht aufgerufen, in Cocoa-Touch?" Ich merke, dass ich eine gesamte Ansicht, dass ist genau das, was ich will, und wickeln Sie es in ein view-controller und presentModalView-aber ich war irgendwie in der Hoffnung, dass es einen standard, die normale Benutzer-Eingabe "dialog" Ansicht, dass die kam-mit Kakao-touch. "Geben Sie Ihren Namen ein", "geben Sie den Suchbegriff" etc., sind SEHR Allgemeine Dinge!
Sowieso... hier ist die Frage, wie ich ursprünglich fragte es:
Diesem code:
UIAlertView* find = [[UIAlertView alloc] init];
[find setDelegate:self];
[find setTitle:@"Find"];
[find addButtonWithTitle:@"Cancel"];
[find addButtonWithTitle:@"Find & Bring"];
[find addButtonWithTitle:@"Find & Go"];
[find addButtonWithTitle:@"Go To Next"];
[find addSubview:_findText];
CGRect frm = find.frame;
int height = frm.size.height + _findText.frame.size.height + 100; //note how even 100 has no effect.
[find setFrame:CGRectMake(frm.origin.x, frm.origin.y, frm.size.width, height)];
[find setNeedsLayout];
[find show];
[find release];
Erzeugt diese Warnung anzeigen:
Finden Sie Alert http://www.publicplayground.com/IMGs/Misc/FindAlert.png
(Angefangen habe ich mit dem code von diese Frage emi1Faber, und es funktioniert wie beworben, aber als ich Stand in meinem Kommentar, die Abbrechen-Schaltfläche overlays text-Feld).
Wie ich mische alles, um das text-Feld passen? [findAlert setNeedsLayout] scheint nicht, etwas zu tun, auch nachdem ich [findAlert setFrame:tallerFrame]. Tipps?
Dank!
- Wie sind Sie mit der Bestellung die Schaltflächen vertikal aus??
- das Standardverhalten von einem UIAlerView ist, dass, wenn es mehr als zwei Tasten, wird es beginnen ausrichten vertikal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste (und richtige Weg) um den text zu bewegen Ansicht nach unten fügen Sie eine Nachricht
Auch der Grund, den Rahmen nicht die Wirkung ist, dass
-show
setzt den Rahmen und schafft die view-Hierarchie vor dem Start der animation. Sie sollten auch den text anzeigen, die first responder, so dass die Tastatur erscheint.Vollständigen Beispiel:
Hinweis: Sie können auch ändern, die Untersichten der uialertview-Objekt, aber da Apple sich bereits verändert hat, die uialertview-Objekt-layout sollte man erst einmal prüfen, Ihre Klasse Beschreibungen und frames anhand der bekannten Werte vor der Einstellung von neuen. Sie können sogar so etwas wie dieses:
(Quelle: booleanmagic.com)
Selbst wenn man diese arbeiten ist es nicht sehr iPhone-y. Die
UIAlertView
ist wirklich nicht für user-input wie diese. Wenn man sich in allen Apple-apps, die Sie werden sehen, dass Sie mit einem neuen Ansicht angezeigt, die diepresentModalViewController:
Methode derUIViewController
.Bearbeiten: Dieser Rat ist nicht mehr so wahr wie es war, als ich es schrieb. Apple haben zunehmend verwendet alert-sichten als text-Eingabefelder und iOS5 auch über eine systemeigene Unterstützung, ohne Durcheinander herum mit Aussicht (check-out die
alertViewStyle
Eigenschaft).Ich denke, vielleicht, wenn Sie brauchen, um über vier Tasten, die dann mithilfe einer benutzerdefinierten
UIViewController
ist wohl immer noch der richtige Weg zu gehen. Aber wenn Sie nur wollen, um ein Kennwort eingeben, mit OK/Abbrechen-Schaltflächen dann ist es gut.Zoul schlug die beste Methode zum erfassen von Benutzereingaben nur:
a) Fügen Sie die UITextFieldDelegate Protokoll zu Ihrer Klasse.
b) etwas Tun, wie
c) Der entscheidende Teil war, war den Delegierten des textField-Objekts auf sich selbst, dann auf Daten zugreifen, können Sie einfach:
Hoffe, dies hilft jemand, da hatte ich ein bisschen denken, um es richtig zu machen.
Wahrscheinlich würden Sie wollen, einen Blick in die
addTextFieldWithValue
Methode derUIAlertView
? Fügen Sie den folgenden code irgendwo an der Spitze Ihrer Klasse:Ist es nicht offiziell, aber IMHO ist es nicht immer Sie abgelehnt aus dem App store und es ist viel bessere Lösung als das hacken der textfield in dem dialog Selbst.
Erläutert, wie die Anzahl der Spalten festlegen, habe es nicht getestet.
http://iloveco.de/uikit-alert-types/
Dies wird es uns ermöglichen, rufen Sie die Methode ohne den compiler werfen uns eine Warnung.
Versuchen Sie, in einigen (\n)s nach dem Titel in der uialertview-Objekt-Initialisierung. Wird, drücken Sie die Tasten. Und ich Stimme mit Stephen hier. Gibt es Chancen, dass Apple möglicherweise lehnen eine app, wenn es verwendet Steuerelemente in einer Weise, die Sie nicht sein sollte. (es gibt da eine bestimmte Klausel in den Human Interface Guidelines darüber!)
Diese einfachere Methode funktioniert für mich:
Hoffe, das hilft. Oh, wenn Sie benötigt mehrere button-Zeilen, dann ist es:
Cheers
https://github.com/TomSwift/TSAlertView
Diese Bibliothek tatsächlich schafft, die Steuerung von Grund auf neu, anstatt zu versuchen zu hacken uialertview-Objekt, das im Allgemeinen ein Schlechter Plan (TM)