父控制器

#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;
}

ios中输入框的父类--文本框,DataPick,pickerview的更多相关文章

  1. IOS中UITextView(多行文本框)控件的简单用法

    1.创建并初始化 UITextView文本视图相比与UITextField直观的区别就是UITextView可以输入多行文字并且可以滚动显示浏览全文.UITextField的用处多,UITextVie ...

  2. 在C# 中 如何限制在文本框(textBox)中输入的类型为正整数

    在文本框的 KeyPress 事件中写下这些代码就可以保证是正整数了 private void textBox1_KeyPress(object sender, KeyPressEventArgs e ...

  3. html中radio单选和文本框限制只能输入数字的解决方案

    一.当html中存在多个radio单选按钮时将所有的单选按钮name属性设置为一样,就可实现每次只选中一个的效果. 二.限制文本框只能输入数字,代码如下: $(function(){ $(" ...

  4. wpf中通过ObjectDataProvider实现文本框的双向数据绑定(ps:适用于在文本框比较多的时候使用)

    前端代码: 也页面的xaml中引入ObjectDataProvider: <Window.Resources> <ResourceDictionary> <ObjectD ...

  5. MFC中如何给静态文本框添加消息响应

    需要两个步骤: 第一个: 是改变它的ID(默认情况下所有的静态文本框的ID都为IDC_STATIC,你需要改变他的ID为其他的值). 第二个: 是在它的属性对话框中选中Notify选项,VS是将该属性 ...

  6. C#判断页面中的多个文本框输入值是否有重复的实现方法

    List<string> list = new List<string>();//首先定义一个泛型数组 //这里假如说有四个文本框 string mainseat = this ...

  7. ios中的三种弹框《转》

    目前为止,已经知道3种IOS弹框: 1.系统弹框-底部弹框 UIActionSheet  (1)用法:处理用户非常危险的操作,比如注销系统等 (2)举例: UIActionSheet *sheet = ...

  8. ios中的三种弹框

    目前为止,已经知道3种IOS弹框: 1.系统弹框-底部弹框 UIActionSheet  (1)用法:处理用户非常危险的操作,比如注销系统等 (2)举例: UIActionSheet *sheet = ...

  9. IOS中position:fixed弹出框中的input出现光标错位的问题

    解决方案是 在弹框出现的时候给body添加fixed <style type="text/css"> body{ position: fixed; width: 100 ...

随机推荐

  1. springbank 开发日志 SpringMVC是如何找到handler找到对应的方法并执行的

    从DispatcherServlet说起,本文讨论的内容都是DispatcherServlet的doDispatch方法完成 mappedHandler是一个HandlerExecutionChain ...

  2. webpack 使用环境变量

    要在开发和生产构建之间,消除 webpack.config.js 的差异.你可能需要环境变量. 可以使用 Node.js 模块的标准方式:在运行 webpack 时设置环境变量,并且使用 Node.j ...

  3. day17--JQuery实例

        1.表格选择框--全选,反选,取消 <!DOCTYPE html> <html lang="en"> <head> <meta c ...

  4. Scala入门教程---《chang哥教你一天搞定Scala》

    <chang哥教你一天搞定Scala> /** * <chang哥教你一天搞定Scala> * scala是一门多范式编程语言,集成了面向对象编程和函数式编程等多种特性. * ...

  5. BZOJ1898 [Zjoi2005]Swamp 沼泽鳄鱼 矩阵

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1898 题意概括 有一个无向图. 其中,有许多条鱼在以循环的规律出现,比如循环在1,2,3这些点出现 ...

  6. BZOJ1296 [SCOI2009]粉刷匠 动态规划 分组背包

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1296 题意概括 有 N 条木板需要被粉刷. 每条木板被分为 M 个格子. 每个格子要被刷成红色或蓝 ...

  7. Environment error: “CodeBloks can't find compiler executable in your configured search path's for GNU GCC compiler”

    codeblock安装后,提示cant find compiler executable in your configured search paths for GNU GCC Compiler 可能 ...

  8. Centos7与Windows10添加Windows10启动项并设置为默认启动

    在Centos7下root登陆 编辑 /boot/grub2/grub.cfg vim /boot/grub2/grub.cfg 在第一行添加 menuentry "Windows10&qu ...

  9. 解决html5中video标签无法播放mp4问题的办法

    这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 最近发现了一个 ...

  10. 005.HAProxy+Keepalived高可用负载均衡

    一 基础准备 1.1 部署环境及说明 系统OS:CentOS 6.8 64位 HAProxy软件:HA-Proxy version 1.5.18 Keepalived软件:keepalived-1.3 ...