登陆界面 键盘工具栏的xib创建

 1 //
 2 //  LXKeyboardTool.h
 3 //  注册界面
 4 //
 5 //  Created by 刘羽 on 16/1/5.
 6 //  Copyright © 2016年 LX. All rights reserved.
 7 //
 8
 9 #import <UIKit/UIKit.h>
10
11 typedef enum{
12     keyboardItemTypeNext,
13     keyboardItemTypePrevious,
14     keyboardItemTypeDone
15
16 }keyboardItemType;
17
18 @class LXKeyboardTool;
19
20 @protocol LXKeyboardToolDelegate<NSObject>
21
22 -(void)keyboardTool:(LXKeyboardTool *)keyboardTool didClickItemType:(keyboardItemType)itemType;
23
24 @end
25
26 @interface LXKeyboardTool : UIView
27 //添加代理
28 @property(nonatomic,weak)id<LXKeyboardToolDelegate>delegata;
29 +(instancetype)keyboardTool;
30
31 @end
 1 //
 2 //  LXKeyboardTool.m
 3 //  注册界面
 4 //
 5 //  Created by 刘羽 on 16/1/5.
 6 //  Copyright © 2016年 LX. All rights reserved.
 7 //
 8
 9 #import "LXKeyboardTool.h"
10 @interface LXKeyboardTool()
11
12 - (IBAction)previous:(id)sender;
13
14 - (IBAction)next:(id)sender;
15 - (IBAction)done:(id)sender;
16
17 @end
18
19 @implementation LXKeyboardTool
20
21 /*
22 // Only override drawRect: if you perform custom drawing.
23 // An empty implementation adversely affects performance during animation.
24 - (void)drawRect:(CGRect)rect {
25     // Drawing code
26 }
27 */
28
29 +(instancetype)keyboardTool
30 {
31     return [[[NSBundle mainBundle] loadNibNamed:@"LXKeyboardTool" owner:nil options:nil] lastObject];
32 }
33
34 -(void)previous:(id)sender
35 {//判断代理有没有实现相应的方法
36     if ([self.delegata respondsToSelector:@selector(keyboardTool:didClickItemType:)]) {
37         [self.delegata keyboardTool:self didClickItemType:keyboardItemTypePrevious];
38     }
39 }
40 -(void)next:(id)sender
41 {
42     if ([self.delegata respondsToSelector:@selector(keyboardTool:didClickItemType:)]) {
43         [self.delegata keyboardTool:self didClickItemType:keyboardItemTypeNext];
44     }
45 }
46 -(void)done:(id)sender
47 {
48     if ([self.delegata respondsToSelector:@selector(keyboardTool:didClickItemType:)]) {
49         [self.delegata keyboardTool:self didClickItemType:keyboardItemTypeDone];
50     }
51 }
52
53 @end
//
//  ViewController.m
//  注册界面
//
//  Created by 刘羽 on 16/1/5.
//  Copyright © 2016年 LX. All rights reserved.
//

#import "ViewController.h"
#import "LXKeyboardTool.h"

@interface ViewController ()<LXKeyboardToolDelegate>{
    NSArray *_fileds;//存储所有的textFields

}

@property (weak, nonatomic) IBOutlet UIView *inputContainer;

@property (weak, nonatomic) IBOutlet UITextField *birthdayField;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    //1.初始化自定义键盘
    [self setupCustomKeyboard];
    //2.设置每一个textFiled键盘工具view(inputAccessoryView)
    [self setupKeyboardTool];
    //3监听键盘的事件
    [self setupKeyboardNotification];
}

//1初始化自定义键盘
-(void)setupCustomKeyboard
{
    UIDatePicker *datePicker = [[UIDatePicker alloc]init];
    datePicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
    datePicker.datePickerMode = UIDatePickerModeDate;

    self.birthdayField.inputView = datePicker;
}

 //2.设置每一个textFiled键盘工具view(inputAccessoryView)
-(void)setupKeyboardTool
{   //创建工具栏
    LXKeyboardTool *tool = [LXKeyboardTool keyboardTool];
    //设置代理
    tool.delegata = self;
    //1、获取所有输入框窗口的所有子控件
    NSArray *views = self.inputContainer.subviews;
    //2、创建一个可变数组
    NSMutableArray *arrayM = [NSMutableArray array];
    //3、如果子控件是UITextView 则设置inputAccessView
    for (UIView *child in views) {
        if ([child isKindOfClass:[UITextField class]]) {
            UITextField *uf = (UITextField *)child;
            uf.inputAccessoryView = tool;
            [arrayM addObject:uf];
        }
    }
    _fileds = arrayM;
}

-(void)dealloc
{   //移除监听
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

//监听键盘的事件
-(void)setupKeyboardNotification
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbFrameChange:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
//键盘frame的变化
-(void)kbFrameChange:(NSNotification *)notification
{
    //获取键盘改变时的frame,并转换成CGrect类型
    CGRect kbEndFrame = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    //获取键盘改变时的y值
    CGFloat kbEndY = kbEndFrame.origin.y;

    //获取当前的响应者
    int currentIndex = [self getCurrenResponderIndex];
    UITextField *tf = _fileds[currentIndex];
    CGFloat tfMaxY = CGRectGetMaxY(tf.frame) + self.inputContainer.frame.origin.y;
    //改变控制器view的transform
    //如果textField的最大y值大于键盘的y值,才往上移动
    if (tfMaxY > kbEndY) {
        [UIView animateWithDuration:0.25 animations:^{
            self.view.transform = CGAffineTransformMakeTranslation(0, tfMaxY - kbEndY);
        }];
    }else
    {
        [UIView animateWithDuration:0.25 animations:^{
            self.view.transform = CGAffineTransformIdentity;
        }];
    }
}

#pragma mark 键盘工具条的代理
-(void)keyboardTool:(LXKeyboardTool *)keyboardTool didClickItemType:(keyboardItemType)itemType
{   //  获取当前响应者的索引
    int currentIndex = [self getCurrenResponderIndex];
    switch (itemType) {
        case keyboardItemTypePrevious:
            [self showPreviousField:currentIndex];
            break;

        case keyboardItemTypeNext :
            [self showNextField:currentIndex];
            break;
        case keyboardItemTypeDone:
            [self touchesBegan:nil withEvent:nil];
    }

}

//获取当前textField响应者的索引
-(int)getCurrenResponderIndex
{
    for (UITextField *tf in _fileds) {
        if (tf.isFirstResponder) {//如果是第一响应者
            return [_fileds indexOfObject:tf];
        }
    }
    return -1;//没有找到就返回-1
}

//让上一个FiledText成为响应者
-(void)showPreviousField:(int)currentIndex
{   int previousIndex = currentIndex - 1;
    if (previousIndex > -1) {
        UITextField *preTextField = [_fileds objectAtIndex:previousIndex];
        [preTextField becomeFirstResponder];
    }

}
//让下一个成为响应者
-(void)showNextField:(int)currentIndex
{   int NextIndex = currentIndex + 1;
    if (NextIndex < _fileds.count) {
        UITextField *nextTextField = [_fileds objectAtIndex:NextIndex];
        [nextTextField becomeFirstResponder];
    }

}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    [self.view endEditing:YES];
    [UIView animateWithDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformIdentity;
    }];
}

@end
时间: 2024-11-06 22:22:42

登陆界面 键盘工具栏的xib创建的相关文章

iOS开发从入门到精通--XIB使用,登陆界面小试牛刀

XIB使用,登陆界面小试牛刀 创建一个新的视图控制器,具体操作参见点击查看 在创建好的VCRoot.xib里面拖动需要的控件,并拖动给相应的控件添加属性,给登陆按钮添加事件. VCRoot.h文件里面: #import <UIKit/UIKit.h> @interface VCRoot : UIViewController //IBOutlet表示从xib中创建的 @property (weak, nonatomic) IBOutlet UITextField *mName; @propert

IOS开发——UI进阶篇(八)pickerView简单使用,通过storyboard加载控制器,注册界面,通过xib创建控制器,控制器的view创建,导航控制器的基本使用

一.pickerView简单使用 1.UIPickerViewDataSource 这两个方法必须实现 // 返回有多少列 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; // 返回第component有多少行 - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;

alertDialog创建登陆界面,判断用户输入

alertDialog创建登陆界面,需要获取用户输入的用户名和密码,获取控件对象的时候不能像主布局文件那样获得, 需要在onClickListener中获取,代码如下: 1 public boolean onOptionsItemSelected(MenuItem item) { 2 // TODO Auto-generated method stub 3 switch(item.getItemId()){ 4 case 1: 5 Intent intent = new Intent(); 6

IOS学习 03 QQ登陆界面

学习IOS开发,现在做一个简单的QQ登陆界面的开发,如下图: 1.1 创建项目和设计界面,界面就如上图,两个Label,两个个text,加上一个Button登陆按键,界面比较简单,如下图. 2.2 说下属性设置,在输入QQ号码的文本框里,在属性Placeholder中输入“请输入QQ号吗”,这个属性当程序起动时,就会自动的在QQ号码的输入文本框中显示. 2.3  设置text的属性Clear Button=Appears while editing.这个属性是在程序运行时,在文本框输入QQ号码时

Java 简单的登陆界面

刚接触Java没多久,可能讲的比较浅显,若有不妥之处还望指正~ ······创建一个登陆界面类 类中定义显示界面的函数,类型public void 名字 (我就叫它ShowUI吧): 一个界面由许多组件组成:包含显示.装饰的图片,账号框,密码框,复选框,按钮等等,这些组件不可能是集合显示的,所以需要一个载体--也称作顶级容器或者窗体,Java中这种类型叫做JFrame(在文件javax.swing.JFrame中,这个其实不用记,如果使用eclipse,可直接将鼠标放在JFrame处,点击就可以

Eclipse通过jdbc连接数据库制作简单登陆界面

一.前言: 做网站开发,要求有多种搭配方式,前台技术可以使用PHP.ASP.JSP.ASP.NET.CGI等任何一种: 需要用到的基础语言用的最多的就是HTML/CSS.JS.JAVA.XML这些了,HTML/CSS+JS可以实现对界面的描绘渲染,而JAVA则可以做后台数据处理,XML也是可以当作传输数据的介质(思考:XML比HTML强大这么多,为什么它没能替代HTML?): 这篇文章通过简单的JSP文件实现登陆界面,所以只用到了以下技术: HTML/CSS,简单演示就不做CSS样式了,可自行学

IOS简单的登陆界面

主要需要注意的几个问题: 1.导入图片方式最好用文件导入 代码: 在ViewController.m文件中 2.UILable常用属性 @property(nonatomic,copy)   NSString           *text; //设置文本内容 @property(nonatomic,retain) UIFont             *font; //设置字体 @property(nonatomic,retain) UIColor            *textColor;

iOS设计中不同屏幕适配的方法-登陆界面

在iOS的手机界面设计中,由于不同手机类型的手机的尺寸不同,那么在设计手机界面时就得对屏幕进行适配,这里就以登陆界面的设计为例简单说明下 实现屏幕适配的方法:(屏幕自动适配缩放) 效果: 下面就看下代码实现的过程: 1.在代理中实现的代码: AppDelegate.h // 登陆界面设计 #import <UIKit/UIKit.h> #define ScreenHeight [[UIScreen mainScreen]bounds].size.height//屏幕高度 #define Scr

简单登陆界面的编辑

界面创造: 这个界面运用了一些基本的Java类,首先用JFrame创建一个登陆界面内容面板,大小固定好.再用Dimension类确定了内容面板的高度与宽度,运用获取位置的代码把面板显示在屏幕中央.整个界面采用的是流式布局.在添加两个Jabel 组件标签分别是账号和密码,用代码固定位置.分别在标签后面添加一个JTextField组件并固定好位置用来输入账号密码.之后添加一个Jbutton组件,添加一个登陆按钮固定位置与大小.这样一个简单的图形用户界面就做好了 . 功能实现: 在mian程序中给us