陈斌彬的技术博客

Stay foolish,stay hungry

iOS开发小记:带输入框(TextField)的UIAlertView

自己简单定制一个AlertView上添加UITextField,由于项目很简单,就没做很复杂,直接在alertView上addSubview个输入框,然后点击按钮的时候再获取出来这个输入框的值就ok了。是不是很简单呢?

下面是最初的想法,实现的代码:

//自己定义一个UITextField添加上去,后来发现ios5自带了此功能
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"类别修改" message:@" " delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"修改",nil];
UITextField * txt = [[UITextField alloc] init];
txt.backgroundColor = [UIColor whiteColor];
txt.frame = CGRectMake(alert.center.x+65,alert.center.y+48, 150,23);
[alert addSubview:txt];
[alert show];

这张图就是上述代码的效果,可以看到这个输入框不是很美观,棱角很明显,没圆角,没阴影,控制也不是很方便。

img

这样其实是一个很笨的方法,没有封装起来一个独立的AlertView,只想投简单搞定一个类似这样功能的东西,不过还是有用的,记录下来以后方便改造。

后来发现经高人指点,ios5已经自带了上述功能,甚至更丰富,那就是 Alert 的 alertViewStyle 属性。

alertViewStyle 属性有以下三种选项:

UIAlertViewStylePlainTextInput - 添加一个普通输入框
UIAlertViewStyleSecureTextInput - 密码输入框
UIAlertViewStyleLoginAndPasswordInput - 普通输入框加密码输入框

下面分别来看看这三种属性的效果:

img

(UIAlertViewStylePlainTextInput)

img

(UIAlertViewStyleSecureTextInput)

img

(UIAlertViewStyleLoginAndPasswordInput)

可以看到自带的文本+密码输入框弹出的键盘有点点不一样,稍带透明。

初始化AlertView后,通过设置这个属性,达到AlertView上出现输入框的效果,然后再添加UIAlertViewDelegate代理,在下面棉纺就可以获取到这个文本框。

-(void)alertView : (UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex  
{  
       //得到输入框
       UITextField *tf=[alertView textFieldAtIndex:0];
}

是不是很简单呢,看来Xcode是越来越让开发者省心,这也是它不断更新带来的好处,这个只是最基本的实现方法,如果想达到一些额外的效果或者想要的功能,比如在Alert上添加一个UIImageView什么的,那就要自己动手丰衣足食了。。。

附上代码

#import "ViewController.h"

@interface ViewController ()

- (IBAction)actionButton:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)actionButton:(id)sender {

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"类别修改" message:@" " delegate:self
                                          cancelButtonTitle:@"取消" otherButtonTitles:@"修改",nil];
    alert.alertViewStyle  = UIAlertViewStylePlainTextInput;

    [alert show];

}
- (void)didPresentAlertView:(UIAlertView *)alertView
{
    UITextField *textField = [alertView textFieldAtIndex:0];
    NSLog(@"present is %@",textField.text);

}

- (void)alertView:(UIAlertView*)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    //得到输入框
    UITextField *tf=[alertView textFieldAtIndex:0];
    NSString * name = tf.text;
    NSLog(@"name is %@",name);
}

Resource Reference