- (void)creatTextField {
NSArray *titles = @[@"登录",@"注册"];
for (int i = 0; i < 2; i++) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 30+40*i, 300, 30)];
textField.borderStyle = UITextBorderStyleLine;
textField.tag = 101+i;
//设置代理
textField.delegate = self;
textField.clearButtonMode = UITextFieldViewModeAlways;
if (i == 1) {
textField.secureTextEntry = YES;
}
[self.view addSubview:textField];
[textField release];
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(40+140*i, 400, 100, 50);
[button setTitle:titles[i] forState:UIControlStateNormal];
[button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
button.tag = 201+i;
[self.view addSubview:button];
}
//UITextField 成为第一响应者 就会 弹出键盘
UITextField *text1 = (UITextField *)[self.view viewWithTag:101];
//成为第一响应者
[text1 becomeFirstResponder];
/**
1.点击TextField会成为第一响应者
2.通过代码 [text1 becomeFirstResponder];
收键盘 就是 取消textField的第一响应
*/
}
- (void)btnClick:(UIButton*)button {
kDebugPrint;
[self hiddenKeyboard];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self hiddenKeyboard];
}
#pragma mark - UITextFieldDelegate
//点击return键的时候调用
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
//取消第一响应
[textField resignFirstResponder];
NSLog(@"return 键被点击");
kDebugPrint;
return YES;
}
#pragma mark - 取消第一响应
- (void)hiddenKeyboard {
UITextField *text1 = (UITextField *)[self.view viewWithTag:101];
UITextField *text2 = (UITextField *)[self.view viewWithTag:102];
[text1 resignFirstResponder];//取消第一响应
[text2 resignFirstResponder];
}
- (void)viewDidLoad
{
[super viewDidLoad];
/*
键盘在弹出和收起的时候 都会向系统发送通知,那么这时我们只需要把这个通知接收到了处理一下就可以了
我们的每个app有且只有一个通知中心(单例对象),当一个对象要发通知的时候 都是通过系统通知中心 进行广播,我们只需要提前在通知中心注册一个观察者 专门来监听这个广播通知就可以了
1.先在代码入口注册一个观察者
2.接收到通知之后 观察者就可以去处理这个通知
*/
//必须先注册观察者
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
//注册观察者
/**
第一个参数 任意类型对象地址
2 第一个参数的行为 SEL
3 通知的名字
4 谁发的通知 nil表示 可以接收任意对象发送的指定通知
一旦 键盘弹出 观察者就可以收到这个广播,让self调用 keyboardShow:
*/
//监听弹键盘通知
[nc addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil];
//监听收键盘通知
[nc addObserver:self selector:@selector(keyboardHidden:) name:UIKeyboardWillHideNotification object:nil];
[self creatTextField];
}
#pragma mark - 接收到通知调用的函数
- (void)keyboardShow:(NSNotification *)nf {
NSLog(@"弹键盘");
NSDictionary *dict = nf.userInfo;
NSLog(@"dict:%@",dict);
//获取弹键盘时间
//double t = [dict[@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
double t = [dict[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIButton *button1 = (UIButton *)[self.view viewWithTag:201];
UIButton *button2 = (UIButton *)[self.view viewWithTag:202];
/*
^{ }
block 代码块 相当于一个无名函数 匿名函数
block 主要用于回调
*/
[UIView animateWithDuration:t animations:^{
//修改的view的属性放在这里block中
button1.frame = CGRectMake(40, 200, 100, 50);
button2.frame = CGRectMake(180, 200, 100, 50);
} completion:^(BOOL finished) {
//动画完成之后 回调这个block
NSLog(@"动画完成");
}];
}
- (void)keyboardHidden:(NSNotification *)nf {
NSLog(@"收键盘");
UIButton *button1 = (UIButton *)[self.view viewWithTag:201];
UIButton *button2 = (UIButton *)[self.view viewWithTag:202];
//收键盘的时候按钮回去
[UIView animateWithDuration:0.25 animations:^{
//修改的view的属性放在这里block中
button1.frame = CGRectMake(40, 400, 100, 50);
button2.frame = CGRectMake(180, 400, 100, 50);
} completion:^(BOOL finished) {
//动画完成之后 回调这个block
NSLog(@"动画完成");
}];
}
NSArray *titles = @[@"登录",@"注册"];
for (int i = 0; i < 2; i++) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 30+40*i, 300, 30)];
textField.borderStyle = UITextBorderStyleLine;
textField.tag = 101+i;
//设置代理
textField.delegate = self;
textField.clearButtonMode = UITextFieldViewModeAlways;
if (i == 1) {
textField.secureTextEntry = YES;
}
[self.view addSubview:textField];
[textField release];
UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(40+140*i, 400, 100, 50);
[button setTitle:titles[i] forState:UIControlStateNormal];
[button addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside];
button.tag = 201+i;
[self.view addSubview:button];
}
//UITextField 成为第一响应者 就会 弹出键盘
UITextField *text1 = (UITextField *)[self.view viewWithTag:101];
//成为第一响应者
[text1 becomeFirstResponder];
/**
1.点击TextField会成为第一响应者
2.通过代码 [text1 becomeFirstResponder];
收键盘 就是 取消textField的第一响应
*/
}
- (void)btnClick:(UIButton*)button {
kDebugPrint;
[self hiddenKeyboard];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self hiddenKeyboard];
}
#pragma mark - UITextFieldDelegate
//点击return键的时候调用
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
//取消第一响应
[textField resignFirstResponder];
NSLog(@"return 键被点击");
kDebugPrint;
return YES;
}
#pragma mark - 取消第一响应
- (void)hiddenKeyboard {
UITextField *text1 = (UITextField *)[self.view viewWithTag:101];
UITextField *text2 = (UITextField *)[self.view viewWithTag:102];
[text1 resignFirstResponder];//取消第一响应
[text2 resignFirstResponder];
}
- (void)viewDidLoad
{
[super viewDidLoad];
/*
键盘在弹出和收起的时候 都会向系统发送通知,那么这时我们只需要把这个通知接收到了处理一下就可以了
我们的每个app有且只有一个通知中心(单例对象),当一个对象要发通知的时候 都是通过系统通知中心 进行广播,我们只需要提前在通知中心注册一个观察者 专门来监听这个广播通知就可以了
1.先在代码入口注册一个观察者
2.接收到通知之后 观察者就可以去处理这个通知
*/
//必须先注册观察者
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
//注册观察者
/**
第一个参数 任意类型对象地址
2 第一个参数的行为 SEL
3 通知的名字
4 谁发的通知 nil表示 可以接收任意对象发送的指定通知
一旦 键盘弹出 观察者就可以收到这个广播,让self调用 keyboardShow:
*/
//监听弹键盘通知
[nc addObserver:self selector:@selector(keyboardShow:) name:UIKeyboardWillShowNotification object:nil];
//监听收键盘通知
[nc addObserver:self selector:@selector(keyboardHidden:) name:UIKeyboardWillHideNotification object:nil];
[self creatTextField];
}
#pragma mark - 接收到通知调用的函数
- (void)keyboardShow:(NSNotification *)nf {
NSLog(@"弹键盘");
NSDictionary *dict = nf.userInfo;
NSLog(@"dict:%@",dict);
//获取弹键盘时间
//double t = [dict[@"UIKeyboardAnimationDurationUserInfoKey"] doubleValue];
double t = [dict[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
UIButton *button1 = (UIButton *)[self.view viewWithTag:201];
UIButton *button2 = (UIButton *)[self.view viewWithTag:202];
/*
^{ }
block 代码块 相当于一个无名函数 匿名函数
block 主要用于回调
*/
[UIView animateWithDuration:t animations:^{
//修改的view的属性放在这里block中
button1.frame = CGRectMake(40, 200, 100, 50);
button2.frame = CGRectMake(180, 200, 100, 50);
} completion:^(BOOL finished) {
//动画完成之后 回调这个block
NSLog(@"动画完成");
}];
}
- (void)keyboardHidden:(NSNotification *)nf {
NSLog(@"收键盘");
UIButton *button1 = (UIButton *)[self.view viewWithTag:201];
UIButton *button2 = (UIButton *)[self.view viewWithTag:202];
//收键盘的时候按钮回去
[UIView animateWithDuration:0.25 animations:^{
//修改的view的属性放在这里block中
button1.frame = CGRectMake(40, 400, 100, 50);
button2.frame = CGRectMake(180, 400, 100, 50);
} completion:^(BOOL finished) {
//动画完成之后 回调这个block
NSLog(@"动画完成");
}];
}