给UIAlertView添加UITextField模拟登录框

首先要自定义一个UIAlertView扩展类,如MAlertView:

.h文件

#import <Foundation/Foundation.h>



@interface MAlertView : UIAlertView {

UITextField *passwdField;

NSInteger textFieldCount;

}



- (void)addTextField:(UITextField *)aTextField placeHolder:(NSString *)placeHolder;


@end


.m文件



#import "MAlertView.h"


#define kMAlertViewTextFieldHeight 30.0

#define kMAlertViewMargin 10.0


@implementation MAlertView


- (void)initialize{


}


//2 buttons supported at most


- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...{

if ((self = [super initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:otherButtonTitles,nil])) {


}

return self;

}


- (void)layoutSubviews{


CGRect rect = self.bounds;

rect.size.height += textFieldCount*(kMAlertViewTextFieldHeight + kMAlertViewMargin);

self.bounds = rect;

float maxLabelY = 0.f;

int textFieldIndex = 0;

for (UIView *view in self.subviews) {


if ([view isKindOfClass:[UIImageView class]]) {

}

else if ([view isKindOfClass:[UILabel class]]) {

rect = view.frame;

maxLabelY = rect.origin.y + rect.size.height;

}

else if ([view isKindOfClass:[UITextField class]]) {

rect = view.frame;

rect.size.width = self.bounds.size.width - 2*kMAlertViewMargin;

rect.size.height = kMAlertViewTextFieldHeight;

rect.origin.x = kMAlertViewMargin;

rect.origin.y = maxLabelY + kMAlertViewMargin*(textFieldIndex+1) + kMAlertViewTextFieldHeight*textFieldIndex;

view.frame = rect;

textFieldIndex++;

}

else { //UIThreePartButton

rect = view.frame;

rect.origin.y = self.bounds.size.height - 65.0;

view.frame = rect;

}

}


}


- (void)addTextField:(UITextField *)aTextField placeHolder:(NSString *)placeHolder{

if (aTextField != nil) {

textFieldCount++;

aTextField.frame = CGRectZero;

aTextField.borderStyle = UITextBorderStyleRoundedRect;

aTextField.placeholder = placeHolder;

[self addSubview:aTextField];

// [self setNeedsLayout];

}

}


@end



如何使用此扩展类:

 
 

- (void)viewDidLoad

{

[superviewDidLoad];

MAlertView *alert = [[MAlertViewalloc] initWithTitle:@"Title"message:nildelegate:selfcancelButtonTitle:@"Cancel"otherButtonTitles:@"OK",nil];

UITextField* accountField=[[UITextFieldalloc]init];

UITextField* passwdField=[[UITextFieldalloc]init];

[alert addTextField:accountField placeHolder:@"Account"];

[alert addTextField:passwdField placeHolder:@"Password"];

[alert show];

[alert release];

}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex//按键响应函数

{

NSString* msg = [[NSStringalloc] initWithFormat:@"您按下的第%d个按钮!",buttonIndex];

UIAlertView* alert = [[UIAlertViewalloc]initWithTitle:@"提示"

message:msg

delegate:nil

cancelButtonTitle:@"确定"

otherButtonTitles:nil];

[alert show];

[alert release];

[msg release];

}

 
 

效果如图。


进行了简单的封装,只需要用addTextField:placeHolder:方法将textField加进去就好了,其他使用方法和UIAlertView完全一样。
再作些补充说明:因为UIAlertView只有在点击了按钮才能进行交互,所有的text值都是在点击之后获取对应的textField的值。
有些朋友说空值的情况,这个可以在点击之后判断如果是空值就再次弹出alertView就可以了

参考:http://www.cocoachina.com/bbs/read.php?tid=86733

下载源代码:http://download.csdn.net/detail/x1135768777/4214283

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值