iOS开发程序员ios框架

iOS文本编辑控件UITextField和UITextView

2016-02-01  本文已影响2661人  亦枫

记录一个菜鸟的iOS学习之旅,如能帮助正在学习的你,亦枫不胜荣幸;如路过的大神如指教几句,亦枫感激涕淋!

本文摘要:主讲UITextField与UITextView的区别、关于模拟器中键盘的使用、监听键盘弹起和退出的通知事件。至于这两个控件的常用属性,不在一一举例说明。

UILabel控件用于显示文本内容,而UITextField和UITextView控件能够在获取焦点后调起键盘让用户自由输入并编辑文本内容,类似于Android中的EditText控件。在介绍之前,我们先看一下二者之间的主要区别:

下面我们通过代码实例来学习如何通过return键隐藏键盘,同时监听键盘弹起和退出的通知事件。

我们在故事板中拖入一个UITextField和UITextView控件,并在右侧工具栏的属性检查器中设置相关属性,比如在Clean Button中设置清除按钮的显示方式,在Alignment中设置文本内容的水平和垂直对齐方式,在Keyboard Type中设置键盘类型等。

故事板视图.png

一旦UITextField和UITextView获取焦点,便成为第一响应者,系统便会自动弹出键盘,然而键盘的关闭缺需要我们自己去处理。这里就需要提到“第一响应者”这个概念。在iOS中,事件总是沿着响应者链从第一响应者向下传递。要关闭系统键盘,就需要控件放弃第一响应者身份。而本文中提到的两个文本控件也提供了这个方法。

ViewController.h 文件中添加UITextField和UITextView各自的委托协议:UITextFieldDelegate和UITextViewDelegate,并在 ViewController.m文件中添加协议方法。

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

    [textField resignFirstResponder];
    return YES;
    
}

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{

    if ([text isEqualToString:@"\n"]) {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

通过委托协议方法和“resignFirstResponder:”方法即可通过return键轻松关闭系统键盘。

在iOS系统,键盘的弹起和退出都会发送响应的通知,我们为了监听这个通知可以利用通知管理器在视图控制器的生命周期方法中注册和解除通知,代码如下:

- (void) keyboardDidShow{

    NSLog(@"keyboardDidShow");
    
}

- (void) keyboardDidHide{

    NSLog(@"keyboardDidHide");

}

- (void) viewWillAppear:(BOOL)animated{

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidHide) name:UIKeyboardDidHideNotification object:nil];
    [super viewWillAppear:animated];
    
    
}

- (void) viewWillDisappear:(BOOL)animated{

    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object:nil];
    [super viewWillDisappear:animated];
    
}

在运行代码之前,别忘了将View Controller Scene中的文本编辑控件与视图控制器中的委托协议相关联。最终效果如下:

文本编辑控件效果展示.gif

疑难解惑:

上一篇下一篇

猜你喜欢

热点阅读