0
votes

When the user presses my 'import' button, they must be able to type in a URL, which they can then 'ok' or 'cancel'.

How do I do this?

Obviously I could create a new view containing a text field and 2 buttons. But this seems like over coding.

One solution I found involves ' hacking ' a UITextField into a UIAlertView: http://iphone-dev-tips.alterplay.com/2009/12/username-and-password-uitextfields-in.html

(EDIT: Better -- http://www.iphonedevsdk.com/forum/iphone-sdk-development/1704-uitextfield-inside-uialertview.html#post10643 )

This looks really ugly. It is clearly a hack.

Can anyone provide a better solution (or even a better implementation of the same solution path)?

3
Erm.. why don't you use textfield.textor am I not understanding you right?Thomas K
Sorry, my bad wording. I have edited the question.P i

3 Answers

2
votes

OK After a ton of digging, here is the result.

Firstly, putting in 'UITextField UIAlertView' into SO's search returns dozens of hits.

It turns out there is a method for doing this, Need new way to add a UITextField to a UIAlertView but it is private API :|

Pretty much every other solution involves hacking a UIAlertView, which is ugly: http://junecloud.com/journal/code/displaying-a-password-or-text-entry-prompt-on-the-iphone.html
http://iphone-dev-tips.alterplay.com/2009/12/username-and-password-uitextfields-in.html
https://github.com/josecastillo/EGOTextFieldAlertView/
How to move the buttons in a UIAlertView to make room for an inserted UITextField?
^ MrGando's answer is neat
http://iphonedevelopment.blogspot.com/2009/02/alert-view-with-prompt.html
Getting text from UIAlertView

The only proper solution I found (ie coding from scratch from a UIView) is here: https://github.com/TomSwift/TSAlertView

This is all it takes:

- (IBAction) importTap
{
    TSAlertView* av = [[[TSAlertView alloc] init] autorelease];
    av.title = @"Enter URL";
    av.message = @"";

    [av addButtonWithTitle: @"Ok"];
    [av addButtonWithTitle: @"Cancel"];


    av.style = TSAlertViewStyleInput;
    av.buttonLayout = TSAlertViewButtonLayoutNormal;
    av.delegate = self;

    av.inputTextField.text = @"http://";

    [av show];
}

// after animation
- (void) alertView: (TSAlertView *) alertView 
didDismissWithButtonIndex: (NSInteger) buttonIndex
{
    // cancel
    if( buttonIndex == 1 )
        return;

    LOG( @"Got: %@", alertView.inputTextField.text );
}

and Presto!

enter image description here

0
votes

I have created a post in my blog on the topic "How to add UITextField to UIAlertView from XIB". Using XIB to add is easier than pure coding. You can add whatever in a customized small view, then add the small view into the AlertView using 1 line code. Please refer to the following link.

http://creiapp.blogspot.com/2011/08/how-to-add-uitextfield-to-uialertview.html