自定义UIAlertView与UITextFields和UITextViews

时间:2012-12-02 13:47:29

标签: objective-c ios cocoa-touch uitextfield uialertview

我想制作一个UIAlertView,其中UITextFieldUITextView显示大约5到6行。我尝试创建视图并将其添加为子视图,但它重叠了警报视图的按钮。在调整警报视图的大小时,按钮不会向下移动。另外,我需要为它设置不同的背景和东西。那是我需要制作自定义警报视图。我是iPhone编程的新手。请提供一种方法。

4 个答案:

答案 0 :(得分:4)

你真的无法制作自定义警报视图,因为Apple已经决定了它们不希望我们搞砸的东西。如果您只能在警报和股票背景颜色中使用一个文本字段,则可以使用setAlertViewStyle:UIAlertViewStylePlainTextInput将文本字段放入警报中。

UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil, nil];
[myAlertView setAlertViewStyle:UIAlertViewStylePlainTextInput];
[myAlertView show];

但是,如果您确实想要进行这些更改,则必须使用UIView制作自己的更改并将其装扮成警报视图。这是一个粗略的例子:

- (IBAction)customAlert:(UIButton *)sender
{
    UIView *myCustomView = [[UIView alloc] initWithFrame:CGRectMake(20, 100, 280, 300)];
    [myCustomView setBackgroundColor:[UIColor colorWithRed:0.9f green:0.0f blue:0.0f alpha:0.8f]];
    [myCustomView setAlpha:0.0f];

    UIButton *dismissButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [dismissButton addTarget:self action:@selector(dismissCustomView:) forControlEvents:UIControlEventTouchUpInside];
    [dismissButton setTitle:@"Close" forState:UIControlStateNormal];
    [dismissButton setFrame:CGRectMake(20, 250, 240, 40)];
    [myCustomView addSubview:dismissButton];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 240, 35)];
    [textField setBorderStyle:UITextBorderStyleRoundedRect];
    [myCustomView addSubview:textField];

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 75, 240, 150)];
    [myCustomView addSubview:textView];

    [self.view addSubview:myCustomView];

    [UIView animateWithDuration:0.2f animations:^{
        [myCustomView setAlpha:1.0f];
    }];
}

- (void)dismissCustomView:(UIButton *)sender
{
    [UIView animateWithDuration:0.2f animations:^{
        [sender.superview setAlpha:0.0f];
    }completion:^(BOOL done){
        [sender.superview removeFromSuperview];
    }];
}

答案 1 :(得分:0)

执行相同的操作并向下移动按钮,使用多个“\ n”字符作为消息文本。

例如:

UIAlertView *alert = [[UIAlertView alloc]
        initWithTitle: @"Your title"
        message: @"\n\n\n\n\n\n\n\n\n\n"
        delegate: nil
        cancelButtonTitle:@"OK"
        otherButtonTitles:nil];
[alert show];
[alert release];

答案 2 :(得分:0)

对于警报消息文本,只需添加一堆换行符,如下所示:

@"The alert message.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

答案 3 :(得分:0)

那么,最好的方法是创建一个类UIAlertView的子类,但UIAlertView类引用说 UIAlertView类旨在原样使用并且不支持子类化。此类的视图层次结构是私有的,不得修改。

有一段时间我需要创建弹出式登录,我按照tutorial进行了操作。这是非常有用的,然后我读了一些帖子,人们抱怨他们的应用被拒绝,因为使用了UIAlertView的子类。有趣的是,当时,youtube应用程序正在使用弹出式登录控件,看起来他们已经使用了UIAlertView的子类,但可能是他们从头开始创建UIView的子类。我认为值得一试。