如何设置 UIAlertView 的高度和宽度?

Posted

技术标签:

【中文标题】如何设置 UIAlertView 的高度和宽度?【英文标题】:How to set height and width of a UIAlertView? 【发布时间】:2012-02-14 10:18:04 【问题描述】:

我有一个带有图像和大按钮的UIAlertView

问题在于默认的UIAlertView 的尺寸非常小。无法正确看到它的图像。

所以,我想增加UIAlertView 的高度和宽度。换句话说,我想创建一个自定义UIAlertView。这样做的方法是什么?

谢谢。

【问题讨论】:

你可以让警报视图吃很多东西来增加体重吗? ;) 简单的方法:在您的邮件正文中附加/添加额外的换行符 (\n) @basvk- 重播。但它只会增加 alertview 的高度,而不是宽度。主要是我想显示图像而不是消息。 看到这个:***.com/a/3975400/845115 是的,设置框架确实会增加警报视图,但它的背景图像不能正确拉伸 - 如果你把它做得足够大(我在 iPad 上做)它看起来真的吃了太多的法国在它短暂的数字生活中炸薯条:) 【参考方案1】:

我正在向您发送我的代码,我正在 AlertView 中显示一个 TableView,也许它会对您有所帮助。

在头文件中粘贴此代码。

#import <UIKit/UIKit.h>

@interface aaViewController : UIViewController <UIAlertViewDelegate, UITableViewDelegate, UITableViewDataSource>

    UITextField *textfield;
    UITableView *tableView1;

    NSMutableArray *_data;


@property (nonatomic, retain) NSMutableArray *_data;

- (void) showAlertView;
- (void) doAlertViewWithTextView;
- (void) doAlertViewWithTableView;
@end

并在您的 imlpementation(.m) 文件中粘贴此代码。

#import "aaViewController.h"

@implementation aaViewController

@synthesize _data;


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad 
    [super viewDidLoad];

    self._data = [NSMutableArray arrayWithObjects:@"Najeeb", @"Furqan", @"Khalid", nil];
    [self doAlertViewWithTableView];


// Override to allow orientations other than the default portrait orientation.
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
    // Return YES for supported orientations
    return YES;


- (void)didReceiveMemoryWarning 
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.


- (void)viewDidUnload 
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;



- (void)dealloc 
    [super dealloc];


- (void) doAlertViewWithTextView 

    UIAlertView *alert = [[UIAlertView alloc] initWithFrame:CGRectMake(0, 0, 300, 550)];

    alert.title = @"Textview";
    alert.message = @"I am doing cool stuff\n\n\n";
    alert.delegate = self;
    [alert addButtonWithTitle:@"Cancel"];
    [alert addButtonWithTitle:@"OK"];

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(12, 90, 260, 200)];
    textView.text = @"This is what i am trying to add in alertView.\nHappy New Year Farmers! The new Winter Fantasy Limited Edition Items have arrived! Enchant your orchard with a Icy Peach Tree, and be the first farmer among your friends to have the Frosty Fairy Horse. Don't forget that the Mystery Game has been refreshed with a new Winter Fantasy Animal theme! ";
    textView.keyboardAppearance = UIKeyboardAppearanceAlert;

    [alert addSubview:textView];
    [textView release];

    [alert show];
    [alert release];


- (void) doAlertViewWithTableView 

    NSLog(@"Now play with TableView \n%@", self._data);

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Table View" message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];

    tableView1 = [[[UITableView alloc] initWithFrame:CGRectMake(10, 40, 264, 200) style:UITableViewStyleGrouped] autorelease];
    tableView1.dataSource = self;
    tableView1.delegate = self;
    [alert addSubview:tableView1];

    [alert show];
    [alert release];


//#define kTag_EnterNameAlert  1
//#define kTag_NameEmtryField  100
- (void) showAlertView 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Congratulations!"
                                                    message:@"You earned a top score! Enter your name:\n\n"
                                                   delegate:self 
                                          cancelButtonTitle:nil
                                          otherButtonTitles:@"OK", nil];

    //alert.tag = kTag_EnterNameAlert;

    CGRect entryFieldRect = CGRectZero;
    if( UIDeviceOrientationIsPortrait( [UIApplication sharedApplication].statusBarOrientation ) ) 
        entryFieldRect = CGRectMake(12, 90, 260, 25);
    
    else 
        entryFieldRect = CGRectMake(12, 72, 260, 25);
    
    textfield = [[UITextField alloc] initWithFrame:entryFieldRect];
    //textfield.tag = kTag_NameEmtryField;
    textfield.backgroundColor = [UIColor whiteColor];
    textfield.keyboardType = UIKeyboardTypeAlphabet;
    textfield.keyboardAppearance = UIKeyboardAppearanceAlert;
    textfield.autocorrectionType = UITextAutocorrectionTypeNo;
    textfield.clearButtonMode = UITextFieldViewModeWhileEditing;
    [alert addSubview:textfield];
    [textfield becomeFirstResponder];
    [textfield release];

    [alert show];
    [alert release];


# pragma -
# pragma alertView frame Methods

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 

    NSLog(@"name:%@   buttonID:%d",textfield.text,buttonIndex);
    if (buttonIndex == 1) 
        [self doAlertViewWithWebView];
    
    else 
        NSLog(@"%@",alertView.message);
    


// to set the alertView frame size.
- (void)willPresentAlertView:(UIAlertView *)alertView 

    [alertView setFrame:CGRectMake(10, 100, 300, 320)];
    for ( UIView *views in [alertView subviews]) 
        NSLog(@"%@",views);
        if (views.tag == 1 || views.tag == 2) 
            [views setFrame:CGRectMake(views.frame.origin.x, views.frame.origin.y+200, views.frame.size.width, views.frame.size.height)];
        
    


# pragma -
#pragma mark TableView Methods

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
    return 2;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
    if (section == 1) 
        return [_data count];
    
    else
    return 3;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    static NSString* const SwitchCellID = @"SwitchCell";
    UITableViewCell* aCell = [tableView dequeueReusableCellWithIdentifier:SwitchCellID];
    if( aCell == nil ) 
        aCell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SwitchCellID] autorelease];
        aCell.textLabel.text = [NSString stringWithFormat:@"Option %d", [indexPath row] + 1];
        aCell.selectionStyle = UITableViewCellSelectionStyleNone;
        UISwitch *switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
        switchView.tag = [indexPath row]+1;
        aCell.accessoryView = switchView;
        [switchView setOn:YES animated:NO];
        [switchView addTarget:self action:@selector(soundSwitched:) forControlEvents:UIControlEventValueChanged];
        [switchView release];
    

    return aCell;


- (void) soundSwitched:(UISwitch*) switchView 

    if (!switchView.on) 
        NSLog(@"chal bhag %d", switchView.tag);
    


@end

注意:在您的 AppDelegate 中添加作为子视图。

【讨论】:

以上是关于如何设置 UIAlertView 的高度和宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 UIAlertView 按钮的宽度?

如何动态设置ImageView的宽度高度以及位置

如何设置div的固定宽度和高度

如何将宽度和高度变量设置为浏览器窗口的宽度和高度? [复制]

CSS如何怎么设置div边框颜色宽度和高度

如何根据视频的高度和宽度设置屏幕方向