ios中输入框的父类--文本框,DataPick,pickerview

父控制器

#import <UIKit/UIKit.h>
#import "ScrollViewExt.h"
@interface BaseKeyBoardCtrl : UIViewController<UITextFieldDelegate>
@property(nonatomic,assign)ScrollViewExt *scrollviewExt;
//键盘隐藏
-(void)keyboardHide;
//选择器
-(void)selectPickerType:(int)type  data:(NSArray *)data tag:(int)tag;
-(void)startHideView:(NSString *)str;
//设置scrollview的大小
-(void)SetScrollviewHeight:(CGFloat)contentHeight;
@end

//

 
  

//  BaseKeyBoardCtrl.m

 
  

//  ProgramDemo

 
  

//

 
  

//  Created by zy on 13-11-14.

 
  

//  Copyright (c) 2013 zy. All rights reserved.

 
  

//

 
  

 

 
  

#import "BaseKeyBoardCtrl.h"

 
  

#import "PresentView.h"

 
  

#import "JSPresentCommonViewCtrl.h"

 
  

#import "DIYTextField.h"

 
  

 

 
  

 

 
  

@interfaceBaseKeyBoardCtrl (){

 
  

    int _pickerTag;//选择器的tag

 
  

    CGFloat _keyboardHeight;//键盘高度

 
  

    int _diyTextFieldTag;//DiyTextFiletag

 
  

    UITextField *_nextFiled;//下一个控件 -键盘事件

 
  

    BOOL flag;//键盘标志

 
  

}

 
  

 

 
  

@end

 
  

 

 
  

@implementation BaseKeyBoardCtrl

 
  

 

 
  

 

 
  

#pragma mark -生命周期方法

 
  

- (void)dealloc

 
  

{

 
  

    [[NSNotificationCenterdefaultCenter] removeObserver:self];

 
  

    [super dealloc];

 
  

}

 
  

 

 
  

 

 
  

- (void)viewDidLoad

 
  

{

 
  

    [superviewDidLoad];

 
  

    flag=NO;

 
  

    if (IOS7) self.edgesForExtendedLayout=UIRectEdgeNone;//对导航栏和状态栏同时存在有效

 
  

    [selfsetupTopNavigationView];

 
  

    self.view.backgroundColor=[UIColorwhiteColor];

 
  

 

 
  

    //注册键盘事件

 
  

    [[NSNotificationCenterdefaultCenter] addObserver:self

 
  

                                             selector:@selector(keyboardWasShown:)

 
  

                                                 name:UIKeyboardDidShowNotification object:nil];

 
  

    

 
  

    [[NSNotificationCenterdefaultCenter] addObserver:self

 
  

                                             selector:@selector(keyboardWasHidden:)

 
  

                                                 name:UIKeyboardDidHideNotification object:nil];

 
  

 

 
  

            

 
  

    

 
  

    

 
  

    CGFloat y=(IOS7==YES)?64:44;

 
  

    self.scrollviewExt=[[ScrollViewExtalloc] initWithFrame:CGRectMake(0, y, self.view.bounds.size.width, 10000)];

 
  

    _scrollviewExt.delegate=self;

 
  

    _scrollviewExt.contentSize=self.view.bounds.size;

 
  

    _scrollviewExt.contentOffset=CGPointMake(0, 0);

 
  

    [self.viewaddSubview:_scrollviewExt];

 
  

    [_scrollviewExtrelease];

 
  

    

 
  

}

 
  

 

 
  

#pragma mark-设置scrollview的大小

 
  

 

 
  

-(void)SetScrollviewHeight:(CGFloat)contentHeight{

 
  

    CGFloat y=(IOS7==YES)?64:44;

 
  

    self.scrollviewExt.frame=CGRectMake(0, y, self.view.bounds.size.width, self.view.bounds.size.height);

 
  

    self.scrollviewExt.contentSize=CGSizeMake(self.view.bounds.size.width, contentHeight);

 
  

}

 
  

 

 
  

#pragma mark -ScrollViewExt Delegate

 
  

-(void)keyboardHide{

 
  

    [_scrollviewExtendEditing:YES];

 
  

}

 
  

 

 
  

 

 
  

 

 
  

#pragma  mark -键盘弹出

 
  

-(void)keyboardWasShown:(NSNotification*)aNotification{

 
  

    

 
  

    NSDictionary *info=[aNotification userInfo];

 
  

    

 
  

    CGRect KeyBoardrect=[info[UIKeyboardBoundsUserInfoKey] CGRectValue];

 
  

    int curve=[info[UIKeyboardAnimationCurveUserInfoKey] intValue];

 
  

    CGFloat duration=[info[UIKeyboardAnimationDurationUserInfoKey] floatValue];

 
  

    UIWindow *keyWindow = [[UIApplicationsharedApplication] keyWindow];

 
  

    //找第一响应者

 
  

    UIView *firstResponderView = [keyWindow performSelector:@selector(firstResponder)];

 
  

    if ([firstResponderView isKindOfClass:[UITextField class]] ) {

 
  

        //view的高度

 
  

        CGFloat Viewheight=self.view.bounds.size.height;

 
  

        //第一响应者转换坐标

 
  

        CGRect FirstRect=[firstResponderView convertRect:firstResponderView.bounds toView:self.scrollviewExt];

 
  

        CGFloat y=FirstRect.origin.y+FirstRect.size.height;//文本框的高度

 
  

        //键盘的高度

 
  

        CGFloat keyboardheight=KeyBoardrect.size.height+44;//键盘高度--》中文高度44

 
  

        _keyboardHeight=keyboardheight;

 
  

        CGFloat h=Viewheight-y-keyboardheight;

 
  

 

 
  

        

 
  

        if(h<10){

 
  

            [UIViewbeginAnimations:nilcontext:nil];

 
  

            [UIViewsetAnimationCurve:curve];

 
  

            [UIViewsetAnimationDuration:duration];

 
  

            _scrollviewExt.contentOffset=CGPointMake(0, -h+44);

 
  

            [UIViewcommitAnimations];

 
  

        }

 
  

    }

 
  

}

 
  

 

 
  

#pragma mark -隐藏键盘

 
  

-(void) keyboardWasHidden:(NSNotification*)aNotification

 
  

{

 
  

    NSDictionary *info=[aNotification userInfo];

 
  

    

 
  

    int curve=[info[UIKeyboardAnimationCurveUserInfoKey] intValue];

 
  

    CGFloat duration=[info[UIKeyboardAnimationDurationUserInfoKey] floatValue];

 
  

    

 
  

    [UIViewbeginAnimations:nilcontext:nil];

 
  

    [UIViewsetAnimationCurve:curve];

 
  

    [UIViewsetAnimationDuration:duration];

 
  

    if (flag) {

 
  

        flag=NO;

 
  

    }

 
  

    else{

 
  

    _scrollviewExt.contentOffset=CGPointMake(0, 0);

 
  

    }

 
  

    [UIViewcommitAnimations];

 
  

    

 
  

}

 
  

 

 
  

#pragma mark 递归找出第一响应者

 
  

- (UITextField *)findFistResponder:(UIView *)view {

 
  

    for (UIView *child in view.subviews) {

 
  

        if ([child respondsToSelector:@selector(isFirstResponder)]

 
  

            &&

 
  

            [child isFirstResponder]) {

 
  

            return (UITextField *)child;

 
  

        }

 
  

        

 
  

        UITextField *field = [self findFistResponder:child];

 
  

        if (field) {

 
  

            return field;

 
  

        }

 
  

    }

 
  

    

 
  

    returnnil;

 
  

}

 
  

 

 
  

#pragma mark-UITextField delegate

 
  

- (BOOL)textFieldShouldReturn:(UITextField *)textField{

 
  

    UIReturnKeyType returnType=textField.returnKeyType;

 
  

    if (returnType==UIReturnKeyDone) [selfkeyboardHide];

 
  

    else{

 
  

        UITextField *NextTxt=(UITextField *)[self.scrollviewExtviewWithTag:textField.tag+1];

 
  

        [NextTxt becomeFirstResponder];

 
  

        [UIViewanimateWithDuration:0.25 animations:^{

 
  

            [selfscrollviewWithNextTextField:NextTxt];

 
  

        }];

 
  

    }

 
  

    

 
  

    returnYES;

 
  

}

 
  

 

 
  

#pragma mark -UITextFieldDIYTextField公用方法

 
  

//键盘弹出,UIScrollerView滚动

 
  

-(void)scrollviewWithNextTextField:(UITextField *)txt{

 
  

    //view的高度

 
  

    CGFloat Viewheight=self.view.bounds.size.height;

 
  

    //第一响应者转换坐标

 
  

    CGRect FirstRect=[txt convertRect:txt.boundstoView:self.scrollviewExt];

 
  

    CGFloat y=FirstRect.origin.y+FirstRect.size.height;//文本框的高度

 
  

    CGFloat h=Viewheight-y-_keyboardHeight;

 
  

    if(h<10) _scrollviewExt.contentOffset=CGPointMake(0, -h+40);

 
  

}

 
  

 

 
  

 

 
  

 

 
  

#pragma mark -DIYTextField Delegate

 
  

-(void)DIYFieldCustomButtonAction:(DIYTextField *)txt{

 
  

    UITextField *NextTxt=(UITextField *)[self.scrollviewExtviewWithTag:_diyTextFieldTag+1];

 
  

    [NextTxt becomeFirstResponder];

 
  

    [UIViewanimateWithDuration:0.25 animations:^{

 
  

        [selfscrollviewWithNextTextField:NextTxt];

 
  

    }];

 
  

    

 
  

}

 
  

 

 
  

-(void)keyboardShow:(DIYTextField *)textField{

 
  

    _diyTextFieldTag=textField.tag;

 
  

    [selfscrollviewWithNextTextField:textField];

 
  

    [textField addCustomButton:@"NumberPad-Empty" title:@"下一项" target:self action:@selector(DIYFieldCustomButtonAction:)];

 
  

}

 
  

-(void)keyboardHide:(DIYTextField *)textField{

 
  

    [textField delCustomButton:@"NumberPad-Empty"];

 
  

}

 
  

 

 
  

 

 
  

 

 
  

 

 
  

#pragma mark -选择器事件

 
  

/*

 
  

 type =0:是代表数据源 data必须有值 

 
  

       =1是代表显示时间 data=nil

 
  

 tag 是控件表示必须有

 
  

 */

 
  

 

 
  

-(void)selectPickerType:(int)type  data:(NSArray *)data tag:(int)tag{

 
  

    flag=YES;

 
  

    [selfkeyboardHide];

 
  

   UITextField *txt =(UITextField *) [_scrollviewExtviewWithTag:tag+1];

 
  

    if ([txt isKindOfClass:[UITextFieldclass]]) {

 
  

        _nextFiled=txt;

 
  

    }

 
  

    

 
  

    for (UIViewController *vc inself.childViewControllers) {

 
  

        [vc removeFromParentViewController];

 
  

    }

 
  

        _pickerTag=tag;

 
  

        JSPresentCommonViewCtrl *ctrl=[[JSPresentCommonViewCtrlalloc] initWithPresentType:type WithDataArray:data];

 
  

        ctrl.delegate=self;

 
  

        ctrl.method=@selector(startHideView:);

 
  

        CGRect hrect,rect=self.view.bounds;

 
  

        CGRectDivide(rect, &hrect, &rect, 180, CGRectMaxYEdge);

 
  

        [PresentViewshowWithSubView:ctrl.viewsubVFrame:hrect];

 
  

        if (iPhone5) {

 
  

        ctrl.view.frame = CGRectMake(0, 582-260, 320, 260);

 
  

        }else{

 
  

        ctrl.view.frame = CGRectMake(0, 220, 320, 260);

 
  

        }

 
  

        [selfaddChildViewController:ctrl];

 
  

        [ctrl release];

 
  

}

 
  

 

 
  

#pragma mark-隐藏选择器

 
  

-(void)startHideView:(NSString *)str{

 
  

    [PresentViewhidePresentSubView];

 
  

    [_nextFiledbecomeFirstResponder];

 
  

    if (str.length>0) {

 
  

        

 
  

        UIButton *btn=(UIButton *)[self.viewviewWithTag:_pickerTag];

 
  

        [btn setTitle:str forState:UIControlStateNormal];

 
  

    }

 
  

}

@end
 

封装控件view

#import <UIKit/UIKit.h>
#import "DIYTextField.h"

@interface InputView : UIView

#pragma mark- 集合批量生成对应的控件--展示
-(id)initWithShowFrame:(CGRect)frame  valueDic:(NSDictionary *)dic rowHeight:(CGFloat)height SplitWidth:(CGFloat)width;

#pragma mark- 集合批量生成对应的控件--编辑插入
-(id)initWithEditFrame:(CGRect)frame  TextArray:(NSArray *)textArr flagAray:(NSArray *)flagArr ValueArray:(NSArray *)valueArr rowHeight:(CGFloat)height SplitWidth:(CGFloat)width tag:(int)tag delegate:(id)delegate  isplaceHolder:(BOOL)isShow  method:(SEL)method;



@end

=================
#import "InputView.h"
#import "FyGroupLineView.h"
@implementation InputView



#pragma mark -展示控件-多个控件
/*
 valueDic:包含key-value.
 rowHeight ->行高
 width 等于0 自动排版,>0指定排版
 */
-(id)initWithShowFrame:(CGRect)frame  valueDic:(NSDictionary *)dic rowHeight:(CGFloat)height SplitWidth:(CGFloat)width {
    self = [super initWithFrame:frame];
    if (self) {
        CGRect hrect,vrect,rect=UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(0, 10, 0, 10));
        
        FyGroupLineView *lineView=[[FyGroupLineView alloc] initWithFrame:rect WithLineNumbers:dic.allKeys.count];
        [self addSubview:lineView];
        [lineView release];
        for (NSString *key in dic.allKeys) {
            NSString *value=dic[key];
            CGRectDivide(rect, &hrect,&rect , height, CGRectMinYEdge);
            if (width==0) {
                width=[key sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(self.bounds.size.width, 10000) lineBreakMode:NSLineBreakByWordWrapping].width+20;
            }
            CGRectDivide(hrect, &vrect, &hrect, width, CGRectMinXEdge);
            UILabel *lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(vrect, UIEdgeInsetsMake(0, 10, 0, 0)) text:[NSString stringWithFormat:@"%@",key] textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:12]];
            [self addSubview:lb];
            lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(0, 5, 0, 10)) text:value textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:12]];
            [self addSubview:lb];
        }
    }
    return self;
}


#pragma mark -编辑和插入控件-多个控件
/*
 同时生成多个控件---
 textArr-->左边名称集合
 flagArr--->对应控件的标志集合
     0--》文本框 键盘返回类型  英文和数字,
     1--》文本框 键盘返回类型  电话号码
     2--》/文本框 键盘返回类型  电子邮件
     3--》button 选择器
 valueArr。如果有值且集合大小和textArr相同,就是编辑状态 否则是插入状态
 rowHeight  每一行高度
 SplitWidth 每一行分割高度
 tag ->控件对应的标志
 isplaceHolder是否展示isplaceHolder
 method,只针对按钮控件,且是按钮控件的触发事件
*/

-(id)initWithEditFrame:(CGRect)frame  TextArray:(NSArray *)textArr flagAray:(NSArray *)flagArr ValueArray:(NSArray *)valueArr rowHeight:(CGFloat)height SplitWidth:(CGFloat)width tag:(int)tag delegate:(id)delegate  isplaceHolder:(BOOL)isShow  method:(SEL)method{
    self = [super initWithFrame:frame];
    if (self) {
        CGRect hrect,vrect,rect=UIEdgeInsetsInsetRect(self.bounds, UIEdgeInsetsMake(0, 10, 0, 10));
        
        FyGroupLineView *lineView=[[FyGroupLineView alloc] initWithFrame:rect WithLineNumbers:textArr.count];
        [self addSubview:lineView];
        [lineView release];
        
        for (int i=0; i<textArr.count; i++) {
            CGRectDivide(rect, &hrect, &rect,height, CGRectMinYEdge);
            CGRectDivide(hrect, &vrect, &hrect, width, CGRectMinXEdge);
            
            UILabel *lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(vrect, UIEdgeInsetsMake(0, 10, 0, 0)) text:[NSString stringWithFormat:@"%@:",textArr[i]] textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:12]];
            [self addSubview:lb];
            
            int  flag=[flagArr[i] intValue];//对应控件的标志
           
            if (flag!=3) {
                UIImageView *imgview=[UIImageView ImageViewImageName:@"txField_image.png" frame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(5, 0, 5, 10))];
                [self addSubview:imgview];
            }


            NSString *placeHolder=(isShow==YES)?[NSString stringWithFormat:@"请输入%@",textArr[i]]:@"";
            UITextField *txt=nil;
            CGRect rightRect=UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(5, 10, 5, 15));
            if (flag ==0){ //文本框 键盘返回类型  UIKeyboardTypeNamePhonePad,
                 if (i==textArr.count-1)
                     txt=[UITextField TextFieldWithFrame:rightRect target:delegate textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft placeHolder:placeHolder clearMode:UITextFieldViewModeWhileEditing returnKey:UIReturnKeyDone keyBord:UIKeyboardTypeNamePhonePad];
                else
                    txt=[UITextField TextFieldWithFrame:rightRect target:delegate textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft placeHolder:placeHolder clearMode:UITextFieldViewModeWhileEditing returnKey:UIReturnKeyNext keyBord:UIKeyboardTypeNamePhonePad];
                }
            else if (flag==1){//文本框 键盘返回类型  UIKeyboardTypePhonePad,
                if (i==textArr.count-1)
                    txt=[DIYTextField DIYTextFieldWithFrame:rightRect target:nil diyTarget:delegate txColor:[UIColor blackColor] placeHolder:placeHolder];
                 else
                     txt=[DIYTextField DIYTextFieldWithFrame:rightRect target:nil diyTarget:delegate txColor:[UIColor blackColor] placeHolder:placeHolder];
            }
            else if (flag==2){//文本框 键盘返回类型  电子邮件
                if (i==textArr.count-1)
                    txt=[UITextField TextFieldWithFrame:rightRect target:delegate textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft placeHolder:placeHolder clearMode:UITextFieldViewModeWhileEditing returnKey:UIReturnKeyDone keyBord:UIKeyboardTypeEmailAddress];
                else
                    txt=[UITextField TextFieldWithFrame:rightRect target:delegate textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft placeHolder:placeHolder clearMode:UITextFieldViewModeWhileEditing returnKey:UIReturnKeyNext keyBord:UIKeyboardTypeEmailAddress];
                }
            else if (flag==3)//按钮 时间控件DatePicker
                txt=(UITextField *)[UIButton ButtonWithImageName:@"txField_image.png" hImageName:@"txField_image.png" frame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(5, 0,5, 10)) title:[NSString stringWithFormat:@"请选择%@",textArr[i]] titleColor:[UIColor blackColor] font:[UIFont systemFontOfSize:12] target:delegate action:method];

            txt.tag=tag+i;
            if (i==textArr.count-1) {
                if ([txt isKindOfClass:[UITextField class]]) txt.returnKeyType=UIReturnKeyDone;
            }
            if (valueArr.count==textArr.count) {
                NSString *value=valueArr[i];
                if ([txt isKindOfClass:[UIButton class]]) {
                    UIButton *btn=(UIButton *)txt;
                    [btn setTitle:value  forState:UIControlStateNormal];
                }
                else   txt.text=value;

            }
            [self addSubview:txt];
        
        }
    }
    return self;
}

画线

#import <UIKit/UIKit.h>

@interface FyGroupLineView : UIView

- (id)initWithFrame:(CGRect)frame WithLineNumbers:(int)cols;

@end

#import "FyGroupLineView.h"
#import <QuartzCore/QuartzCore.h>

@implementation FyGroupLineView

- (id)initWithFrame:(CGRect)frame WithLineNumbers:(int)cols
{
    self = [super initWithFrame:frame];
    if (self) {
        
        UIImageView *background = [[UIImageView alloc] initWithFrame:self.bounds];
        background.image = [UIImage ImageWithColor:[UIColor whiteColor] frame:self.bounds];
        background.layer.borderWidth = 0.5;
        background.layer.borderColor = rgb(200, 207, 216).CGColor;
        background.layer.cornerRadius = 5;
        background.layer.masksToBounds = YES;
        [self addSubview:background];
        [background release];
        
        CGRect vRect = self.bounds,lineRect;
        for (int i = 0; i<cols-1; i++) {
            CGRectDivide(vRect, &lineRect, &vRect, self.bounds.size.height/cols, CGRectMinYEdge);
            
            lineRect = UIEdgeInsetsInsetRect(lineRect, UIEdgeInsetsMake(lineRect.size.height-0.5, 0, -0.5, 0));
            UILabel *lineLab = [UILabel LabWithFrame:lineRect text:nil textColor:nil textAlign:NSTextAlignmentCenter font:[UIFont systemFontOfSize:11]];
            lineLab.backgroundColor = rgb(200, 207, 216);
            [self addSubview:lineLab];
        }
        
        
    }
    return self;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值