How to move the buttons in a UIAlertView to make room for an inserted UITextField?

后端 未结 8 708
挽巷
挽巷 2020-12-24 00:07

[EDIT] Hmm. Perhaps this question should be titled \"what is the default user-input dialog view called in CocoaTouch?\" I realize that I can create an entire view that is

相关标签:
8条回答
  • 2020-12-24 00:35

    Explains how to set the number of columns, have not tested it.

    http://iloveco.de/uikit-alert-types/

    However there is a private method, setNumberOfRows:(int)n that will allow you to set a maximum number of rows to display the buttons in. To use this method we need to add our own additions to the UIAlertView class. We do this by adding an @interface for UIAlertView in our .m file.

    // extend the UIAlertView class to remove the warning caused
    // by calling setNumberOfRows.
    @interface UIAlertView (extended)
    - (void) setNumberOfRows:(int)num;
    @end
    

    This will allow us to call the method without the compiler throwing us a warning.

    [myAlert setNumberOfRows:2];
    
    0 讨论(0)
  • 2020-12-24 00:40

    The simplest (and most proper way) to move the text view down is to add a message

    [find setMessage:@"\n"];
    

    Also, the reason your frame isn't taking effect is that -show sets the frame and creates the view hierarchy before starting the animation. You should also make the text view the first responder so the keyboard pops up.

    Full example:

    // Create Alert
    UIAlertView* av = [UIAlertView new];
    av.title = @"Find";
    // Add Buttons
    [av addButtonWithTitle:@"Cancel"];
    [av addButtonWithTitle:@"Find & Bring"];
    [av addButtonWithTitle:@"Find & Go"];
    [av addButtonWithTitle:@"Go to Next"];
    // Make Space for Text View
    av.message = @"\n";
    // Have Alert View create its view heirarchy, set its frame and begin bounce animation
    [av show];
    // Adjust the frame
    CGRect frame = av.frame;
    frame.origin.y -= 100.0f;
    av.frame = frame;
    // Add Text Field
    UITextField* text = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
    text.borderStyle = UITextBorderStyleRoundedRect;
    [av addSubview:text];
    [text becomeFirstResponder];
    

    Note: You can also modify the subviews of UIAlertView, but since Apple has already changed the UIAlertView layout once you should check their class descriptions and frames against known values before setting new ones. You can even get something like this:


    (source: booleanmagic.com)

    0 讨论(0)
提交回复
热议问题