views:

587

answers:

2

I have a window within an iPhone application, which is displayed modally to allow the user to enter their settings for a web service upon 'first run'.

The text fields have helper text set, and when you tap them the keyboard shows and allows you to enter text.

Unfortunately the text fields do not clear the helper text, show the edit caret or show the text being entered (as in the screenshot below).

The wonderful issue...

Any suggestions?

The window is being displayed with [self presentModalViewController:<controller_name> animated:YES];, which may or may not be the cause of this issue - when I run the UI via the Interface Builder 'test' application the text boxes respond like normal.

Clear when editing begins has been set for both fields.

Thanks in advance!

Edited: More information After the info Bart Gottschalk provided I thought I should add some more information. First, the application is a Navigation Based Application.

Secondly, the test app Bart recommended worked fine, so that takes the modal window and the view out of the equation.

Third, I was presenting the modal view when the -(void)viewWillAppear... delegate method was being called - which may very well be the wrong place... however I'm not 100% sure if I should be presenting the modal view from within the didFinishLaunchingWithOptions of the App Delegate...

(this is happening on Simulator and iPhone 3.1.3)

+3  A: 

In Interface Builder did you check the box for "Clear When Editing Begins"? With that checked the text field should clear any value once the use taps to edit which is the behavior I think you're looking for.

You can also set the same property programatically using clearsOnBeginEditing if that is convenient in your code.

My guess is that you've done this and it's not behaving as you expect. Just checking on this as a first step in helping you debug.

Also, does this happen in both the Simulator and on a testing device?

Bart

Edited Below...

This seems strange. Let's strip away everything but the basics of presenting a modal view when the application starts and see what happens.

I've recreated the most basic app (that I know of) to test presenting a modal view controller at launch and verify that field editing works fine. What happens for you when you do the same/similar in a new project?

Here is what I'm doing:
1) Create a new view-based app in Xcode called "ModalViewTest"

2) Create a new UIViewController with xib called ModalViewController

3) In ModalViewController.h add a method

-(IBAction)closeModalView;

4) In ModalViewController.m add the method implementation as

-(IBAction)closeModalView {
    [self dismissModalViewControllerAnimated:YES];
}

5) In the ModalViewController.xib create two text fields and set the placeholder text for each to abcd1234 and confirm that "Clear When Editing Begins" is checked.

6) In the ModalViewController.xib add a button "Close" and set Touch Up Inside to fire "closeModalView"

7) In the application delegate (ModalViewTestAppDelegate) add the following import

#import "ModalViewController.h"

8) In the application delegate (ModalViewTestAppDelegate) applicationDidFinishLaunching add the following after the line containing [window makeKeyAndVisible];

ModalViewController *modalViewController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; 
[viewController presentModalViewController:modalViewController animated:YES];

9) Save everything

10) Build and Run this new app

Does editing of the text fields work as expected? If yes, what is different about how you are building and presenting your modalView? If no, then we'll need to dig further to determine what is going on in your environment.

Second Edit Below...

When creating a navigation-based application I did the following to present the modal view at application start. Does this work for you in both your test app as well as your real app?

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after app launch    

    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];

    ModalViewController *modalViewController = [[ModalViewController alloc] initWithNibName:@"ModalViewController" bundle:nil]; 
    [navigationController presentModalViewController:modalViewController animated:YES];

}
Bart Gottschalk
Matthew Savage
This is strange. I've updated my response above. Please take a look and let me know what you think or what happens when you try what I'm suggesting.
Bart Gottschalk
@Bart Gottschalk - Thanks for the update - you've put in *way* more effort then I'd have ever expected. The test app worked fine, but I had a thought which you might be able to confirm. I've updated my original question above. Thanks heaps!
Matthew Savage
You're welcome. I enjoy helping figure these things out and I always learn something in the process. I hope you're able to get to a solution!
Bart Gottschalk
A: 

Well, I just figured it out, but honestly without the persistence and awesome help from Bart it would have taken much longer and been much more frustrating.

It turns out the problem was that I was using a Window instead of a View in the XIB file. This was why when showing the modal view within the Navigation controller it wouldn't display properly (i.e. only a white screen) and why the UITextField would not work properly when showing the view from the RootViewController.

So, to recap - modal views should have UIView, not UIWindow in the XIB/NIB File.

Thanks for your help Bart!

Matthew Savage