IOS5.0以后,UIAlertView开始支持输入框,但是在项目开发中,要适配5.0以下的系统版本,所以带有输入框的AlertView类需要自己写,以下是自己在家时写的代码,不足之处,还请大家指教一下!
//
// UIInputAlertView.h
//
#import <UIKit/UIKit.h>
@interface UIInputAlertView : UIAlertView<UITextFieldDelegate>
@property (nonatomic,retain) UITextField *textFiled;
@end
============================================================================
//
// UIInputAlertView.m
//
#import "UIInputAlertView.h"
#define kMAlertViewTextFieldHeight 30.0
#define kMAlertViewMargin 10.0
@implementation UIInputAlertView
@synthesize textFiled = m_textField;
- (id)initWithTitle:(NSString *)title
message:(NSString *)message
delegate:(id)delegate
cancelButtonTitle:(NSString *)cancelButtonTitle
otherButtonTitles:(NSString *)otherButtonTitles, ...
{
self = [super initWithTitle:title
message:message
delegate:delegate
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:otherButtonTitles,nil];
if (self) {
UITextField *textFld = [[UITextField alloc] initWithFrame:CGRectZero];
textFld.backgroundColor = [UIColor whiteColor];
[textFld becomeFirstResponder];
textFld.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
textFld.delegate = self;
textFld.borderStyle = UITextBorderStyleBezel;
[self addSubview:textFld];
self.textFiled = textFld;
[textFld release];
}
return self;
}
- (void) layoutSubviews {
CGRect frame = self.bounds;
frame.size.height += (kMAlertViewTextFieldHeight + kMAlertViewMargin);
self.bounds = frame;
float maxLabelY = 0.0f;
for (UIView *view in self.subviews) {
if ([view isKindOfClass:[UIImageView class]]) {
}else if ([view isKindOfClass:[UILabel class]]) {
frame = view.frame;
maxLabelY = frame.origin.y + frame.size.height;
}
else if ([view isKindOfClass:[UITextField class]]) {
frame = view.frame;
frame.origin.x = kMAlertViewMargin;
frame.origin.y = maxLabelY + kMAlertViewMargin;
frame.size.width = self.bounds.size.width - 2*kMAlertViewMargin;
frame.size.height = kMAlertViewTextFieldHeight;
view.frame = frame;
}else {
frame = view.frame;
frame.origin.y = maxLabelY + 2*kMAlertViewMargin + kMAlertViewTextFieldHeight;
view.frame = frame;
}
}
}
- (void) dealloc {
[m_textField release];
[super dealloc];
}
@end