首页 > 代码库 > UI: 使用 UITextView 显示多行文本(有键盘处理)
UI: 使用 UITextView 显示多行文本(有键盘处理)
问题:
创建一个简单的TextView:
- (void)viewDidLoad{[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];self.myTextView = [[UITextView alloc] initWithFrame:self.view.bounds]; self.myTextView.text = @"Some text here...";self.myTextView.font = [UIFont systemFontOfSize:16.0f];[self.view addSubview:self.myTextView];}
当TextView中的文字很多时,点击text view,你会发现一个键盘将会从屏幕底部弹出来,遮盖了text view 几乎一半的区域。这意味着,假如用户开始输入文本并达到文本视图中间时,用户将会看不 见之后输入的文本。
UIKeyboarWillShowNotification
无论是什么 UI 组建(text field,text view 等)引起的键盘显示,系统都会发送这个通知。
UIKeyboardDidShowNotification
当键盘已经显示在屏幕上时系统将会发送这个通知。
UIKeyboardWillHideNotification
当键盘即将被隐藏时系统将会发送这个通知。
UIKeyboardDidHideNotification
当键盘完全隐藏时系统将会发送这个通知。
注意:键盘通知包含了一个字典,可以通过 userInfo 这个属性使用它,他指定 了键盘在屏幕上的边界。这个属性属于 NSDictionary 类型。在这个字典里, 其中有一个名为 UIKeyboardFrameEndUserInfoKey 的关键字,它包含了一个 NSValue 类型的对象,这个对象包含一个当键盘完全显示时的矩形边界。这个矩形区域被标记为一个 CGRect。
所以我们的策略就是去发现键盘什么时候准备在屏幕上显示然后以何种方式调整视图。 为了实现这个策略,我们将会用到 UITextView 的 contentInset 这个属性来指定文本内容的边 距,包括到文本视图的顶部,左边,底部和右边的距离。
代码:
- (void)viewWillAppear:(BOOL)animated{ [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(handleKeyboardDidShow:) name:UIKeyboardDidShowNotification object:nil]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(handleKeyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];}- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[NSNotificationCenter defaultCenter]removeObserver:self];}
- (void)handleKeyboardDidShow:(NSNotification *)paramNitification{ //得到键盘的frame NSValue *keyboardRectAsObject = [[paramNitification userInfo]objectForKey:UIKeyboardFrameEndUserInfoKey]; //存入keyboardRect CGRect keyboardRect; [keyboardRectAsObject getValue:&keyboardRect]; //给TextView下边距,使其达到顶端的键盘 _myTextView.contentInset = UIEdgeInsetsMake(0, 0, keyboardRect.size.height, 0);}- (void)handleKeyboardWillHide:(NSNotification *)paramNotification{ //将TextView变回原来大小 _myTextView.contentInset = UIEdgeInsetsZero;}
//接收到通知后一系列处理
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor whiteColor]; _myTextView = [[UITextView alloc]initWithFrame:self.view.bounds]; _myTextView.text = @"Some text here..."; _myTextView.font = [UIFont systemFontOfSize:16.0f]; [self.view addSubview:_myTextView];}
UI: 使用 UITextView 显示多行文本(有键盘处理)