From fedfcc411b80b60674316e6206a517c228e50b57 Mon Sep 17 00:00:00 2001 From: Antti Kolehmainen Date: Wed, 9 Jan 2013 19:00:01 +0200 Subject: [PATCH] - Implemented getTextInput in IOSInput with UIAlertView. --- .../badlogic/gdx/backends/ios/IOSApplication.java | 9 ++-- .../com/badlogic/gdx/backends/ios/IOSInput.java | 57 +++++++++++++++++++++- 2 files changed, 60 insertions(+), 6 deletions(-) diff --git a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSApplication.java b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSApplication.java index 2b52a3cd2..69ce73d5c 100644 --- a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSApplication.java +++ b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSApplication.java @@ -78,6 +78,7 @@ public class IOSApplication extends UIApplicationDelegate implements Application UIApplication uiApp; UIWindow uiWindow; + UIViewController uiViewController; ApplicationListener listener; IOSApplicationConfiguration config; IOSGraphics graphics; @@ -134,8 +135,8 @@ public class IOSApplication extends UIApplicationDelegate implements Application // Create: Window -> ViewController-> GameView (controller takes care of rotation) this.uiWindow = new UIWindow(UIScreen.get_MainScreen().get_Bounds()); - UIViewController uiViewController = new IOSUIViewController(); - this.uiWindow.set_RootViewController(uiViewController); + this.uiViewController = new IOSUIViewController(); + this.uiWindow.set_RootViewController(this.uiViewController); GL20 gl20 = config.useMonotouchOpenTK ? new IOSMonotouchGLES20() : new IOSGLES20(); @@ -144,7 +145,7 @@ public class IOSApplication extends UIApplicationDelegate implements Application // setup libgdx this.input = new IOSInput(this); - this.graphics = new IOSGraphics(getBounds(uiViewController), this, input, gl20); + this.graphics = new IOSGraphics(getBounds(this.uiViewController), this, input, gl20); this.files = new IOSFiles(); this.audio = new IOSAudio(config.useObjectAL); this.net = new IOSNet(this); @@ -158,7 +159,7 @@ public class IOSApplication extends UIApplicationDelegate implements Application this.input.setupPeripherals(); // attach our view to window+controller and make it visible - uiViewController.set_View(graphics); + this.uiViewController.set_View(graphics); this.graphics.Run(); this.uiWindow.MakeKeyAndVisible(); Gdx.app.debug("IOSApplication", "created"); diff --git a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSInput.java b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSInput.java index 62719d665..4e65952e5 100644 --- a/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSInput.java +++ b/backends/gdx-backend-iosmonotouch/src/com/badlogic/gdx/backends/ios/IOSInput.java @@ -21,12 +21,16 @@ import cli.MonoTouch.Foundation.NSSetEnumerator; import cli.MonoTouch.UIKit.UIAcceleration; import cli.MonoTouch.UIKit.UIAccelerometer; import cli.MonoTouch.UIKit.UIAccelerometerDelegate; +import cli.MonoTouch.UIKit.UIAlertView; +import cli.MonoTouch.UIKit.UIAlertViewDelegate; +import cli.MonoTouch.UIKit.UIAlertViewStyle; import cli.MonoTouch.UIKit.UIEvent; +import cli.MonoTouch.UIKit.UITextField; import cli.MonoTouch.UIKit.UITouch; import cli.MonoTouch.UIKit.UITouchPhase; +import cli.MonoTouch.UIKit.UIView; import cli.System.Drawing.PointF; -import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.utils.Array; @@ -188,7 +192,56 @@ public class IOSInput implements Input { @Override public void getTextInput(TextInputListener listener, String title, String text) { - // FIXME implement this + final UIAlertView uiAlertView = buildUIAlertView(listener, title, text); + app.uiViewController.Add(uiAlertView); + uiAlertView.Show(); + } + + /** Builds an {@link UIAlertView} with an added {@link UITextField} for inputting text. + * @param listener Text input listener + * @param title Dialog title + * @param text Text for text field + * @return UiAlertView */ + private UIAlertView buildUIAlertView (final TextInputListener listener, String title, String text) { + UIAlertViewDelegate delegate = new UIAlertViewDelegate() { + @Override + public void Clicked (UIAlertView view, int clicked) { + if (clicked == 0) { + listener.canceled(); + } else if (clicked == 1) { + UIView[] views = view.get_Subviews(); + for (UIView uiView : views) { + if (uiView != null && uiView instanceof UITextField) { + UITextField tf = (UITextField)uiView; + listener.input(tf.get_Text()); + } + } + } + view.Dispose(); + } + + @Override + public void Canceled (UIAlertView view) { + listener.canceled(); + view.Dispose(); + } + }; + + final UIAlertView uiAlertView = new UIAlertView(); + uiAlertView.set_Title(title); + uiAlertView.AddButton("Cancel"); + uiAlertView.AddButton("Ok"); + uiAlertView.set_AlertViewStyle(UIAlertViewStyle.wrap(UIAlertViewStyle.PlainTextInput)); + uiAlertView.set_Delegate(delegate); + + for (UIView uiView : uiAlertView.get_Subviews()) { + if (uiView != null && uiView instanceof UITextField) { + UITextField tf = (UITextField)uiView; + tf.set_Text(text); + } + } + + return uiAlertView; } @Override -- 2.11.0