problem in changing size of uialertview

20,223

Solution 1

To achieve what you want, in your code, after:

[find show];

add:

find.frame = CGRectMake(0,0,300,200);

It's not pretty though, I suggest you use ActionSheets.

Solution 2

This does the job pretty well, and does not look weird when the alert appear (ahmet emrah solution has a pretty bad side effect).

CGAffineTransform myTransform = CGAffineTransformMakeScale(1.0, 0.5f);
[alert setTransform:myTransform];

Solution 3

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Confirmation" message:@" Submit the answer " delegate:self cancelButtonTitle:@"NO" otherButtonTitles:@"YES", nil];
[alert show];
[alert release];

UILabel *theTitle = [alert valueForKey:@"_titleLabel"];
[theTitle setTextColor:[UIColor blackColor]];

UILabel *theBody = [alert valueForKey:@"_bodyTextLabel"];
[theBody setTextColor:[UIColor blackColor]];

UIImage *theImage = [UIImage imageNamed:@"blue-white-abstract-background.jpg"];    
theImage = [theImage stretchableImageWithLeftCapWidth:10 topCapHeight:10];
CGSize theSize = [alert frame].size;

UIGraphicsBeginImageContext(theSize);    
[theImage drawInRect:CGRectMake(0, 0, theSize.width, theSize.height)];    
theImage = UIGraphicsGetImageFromCurrentImageContext();    
UIGraphicsEndImageContext();

//[[alert layer] setContents:[theImage CGImage]];
[[alert layer] setContents:[UIColor clearColor]];

This code does a lot of things to alertview and modify it to increase the size of the alert view.

Solution 4

You can subclass the UIAlertView. I have done something like this, change it for your need.

Header file,

#import <Foundation/Foundation.h>

/* An alert view with a textfield to input text.  */
@interface AlertPrompt : UIAlertView    
{
    UITextField *textField;
}

@property (nonatomic, retain) UITextField *textField;
@property (readonly) NSString *enteredText;

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okButtonTitle;

@end

Source code,

#import "AlertPrompt.h"


@implementation AlertPrompt

static const float kTextFieldHeight     = 25.0;
static const float kTextFieldWidth      = 100.0;

@synthesize textField;
@synthesize enteredText;

- (void) drawRect:(CGRect)rect {
    [super drawRect:rect];

    CGRect labelFrame;
    NSArray *views = [self subviews];
    for (UIView *view in views){
        if ([view isKindOfClass:[UILabel class]]) {
            labelFrame = view.frame;
        } else {    
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + kTextFieldHeight , view.frame.size.width, view.frame.size.height);
        }

    }

    CGRect myFrame = self.frame;
    self.textField.frame = CGRectMake(95, labelFrame.origin.y+labelFrame.size.height + 5.0, kTextFieldWidth, kTextFieldHeight);
    self.frame = CGRectMake(myFrame.origin.x, myFrame.origin.y, myFrame.size.width, myFrame.size.height + kTextFieldHeight);

}

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle okButtonTitle:(NSString *)okayButtonTitle
{

    if (self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:okayButtonTitle, nil])
    {
        // add the text field here, so that customizable from outside. But set the frame in drawRect. 
        self.textField = [[UITextField alloc] init];
        [self.textField setBackgroundColor:[UIColor whiteColor]]; 
        [self addSubview: self.textField];

       // CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 20.0); 
      //  [self setTransform:translate];
    }
    return self;
}
- (void)show
{
    [textField becomeFirstResponder];
    [super show];
}
- (NSString *)enteredText
{
    return textField.text;
}
- (void)dealloc
{
    [textField release];
    [super dealloc];
}
@end
Share:
20,223
mrugen munshi
Author by

mrugen munshi

Updated on July 21, 2022

Comments

  • mrugen munshi
    mrugen munshi almost 2 years

    Hello I am having a alertview and i want to change the size by cgrectmake property but it does not happen . It just take the by default size.

    i tried following code.

    - (void)viewDidLoad {
    [super viewDidLoad];
    UIAlertView* find = [[[UIAlertView alloc] init]initWithFrame:CGRectMake(0,0,300,200)];
    [find setDelegate:self];
    [find setTitle:@"Sample Alert"];
    [find setNeedsLayout];
    [find show];
    [find release];
    

    }

    Thanks in advance .

  • mrugen munshi
    mrugen munshi over 13 years
    here i want to change the width of the alert view how can i change that ,i am able to change the height but dont know how to change width.
  • ahmet emrah
    ahmet emrah over 13 years
    Well my answer still applies you can change width after the call to [find show], and the result is still ugly and you shoud still use actionsheets
  • roocell
    roocell over 12 years
    this just changes the uiwindow for me (ie - the textfield 'message' inside doesn't resize)
  • AWrightIV
    AWrightIV over 12 years
    Nope. This shrinks the contents of the alert view, distorting the text and everything.
  • johnnieb
    johnnieb over 11 years
    @rocell I have a similar problem. The subviews don’t resize properly.
  • Gajendra K Chauhan
    Gajendra K Chauhan almost 11 years
    @ahmetemrah. Making customization of alertview. Is it ok with apple rule. I mean what about approvel or rejection. Can I customize alert view?