父控制器

#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;//DiyTextFile的tag

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 -UITextField和DIYTextField公用方法

//键盘弹出,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(, , , )); 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==) {
width=[key sizeWithFont:[UIFont systemFontOfSize:] constrainedToSize:CGSizeMake(self.bounds.size.width, ) lineBreakMode:NSLineBreakByWordWrapping].width+;
}
CGRectDivide(hrect, &vrect, &hrect, width, CGRectMinXEdge);
UILabel *lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(vrect, UIEdgeInsetsMake(, , , )) text:[NSString stringWithFormat:@"%@",key] textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:]];
[self addSubview:lb];
lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(, , , )) text:value textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:]];
[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(, , , )); FyGroupLineView *lineView=[[FyGroupLineView alloc] initWithFrame:rect WithLineNumbers:textArr.count];
[self addSubview:lineView];
[lineView release]; for (int i=; i<textArr.count; i++) {
CGRectDivide(rect, &hrect, &rect,height, CGRectMinYEdge);
CGRectDivide(hrect, &vrect, &hrect, width, CGRectMinXEdge); UILabel *lb=[UILabel LabWithFrame:UIEdgeInsetsInsetRect(vrect, UIEdgeInsetsMake(, , , )) text:[NSString stringWithFormat:@"%@:",textArr[i]] textColor:[UIColor blackColor] textAlign:NSTextAlignmentLeft font:[UIFont systemFontOfSize:]];
[self addSubview:lb]; int flag=[flagArr[i] intValue];//对应控件的标志 if (flag!=) {
UIImageView *imgview=[UIImageView ImageViewImageName:@"txField_image.png" frame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(, , , ))];
[self addSubview:imgview];
} NSString *placeHolder=(isShow==YES)?[NSString stringWithFormat:@"请输入%@",textArr[i]]:@"";
UITextField *txt=nil;
CGRect rightRect=UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(, , , ));
if (flag ==){ //文本框 键盘返回类型 UIKeyboardTypeNamePhonePad,
if (i==textArr.count-)
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==){//文本框 键盘返回类型 UIKeyboardTypePhonePad,
if (i==textArr.count-)
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==){//文本框 键盘返回类型 电子邮件
if (i==textArr.count-)
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==)//按钮 时间控件DatePicker
txt=(UITextField *)[UIButton ButtonWithImageName:@"txField_image.png" hImageName:@"txField_image.png" frame:UIEdgeInsetsInsetRect(hrect, UIEdgeInsetsMake(, ,, )) title:[NSString stringWithFormat:@"请选择%@",textArr[i]] titleColor:[UIColor blackColor] font:[UIFont systemFontOfSize:] target:delegate action:method]; txt.tag=tag+i;
if (i==textArr.count-) {
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(, , ).CGColor;
background.layer.cornerRadius = ;
background.layer.masksToBounds = YES;
[self addSubview:background];
[background release]; CGRect vRect = self.bounds,lineRect;
for (int i = ; i<cols-; i++) {
CGRectDivide(vRect, &lineRect, &vRect, self.bounds.size.height/cols, CGRectMinYEdge); lineRect = UIEdgeInsetsInsetRect(lineRect, UIEdgeInsetsMake(lineRect.size.height-0.5, , -0.5, ));
UILabel *lineLab = [UILabel LabWithFrame:lineRect text:nil textColor:nil textAlign:NSTextAlignmentCenter font:[UIFont systemFontOfSize:]];
lineLab.backgroundColor = rgb(, , );
[self addSubview:lineLab];
} }
return self;
}
05-11 16:04