iPhone开发-在Iphone中如何实现如发送短信中一样的多行文本输入框

iPhone开发-在Iphone中如何实现如发送短信中一样的多行文本输入框

泛泛之交 发布于 2017-09-10 字数 190 浏览 1247 回复 3

UITextField只支持单行输入,在发送短信界面,下面的文本输入框支持多行输入,当输入的内容超过一行时,输入框和其所在的工具条区的高度自动增长,如何在自己的应用中实现和这个输入框一样的功能。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜无邪 2017-10-31 3 楼

UITextField只是支持单行输入的,如果要多行,你应该使用UITextView或者更为强大一些的UIWebView.

归属感 2017-10-13 2 楼

可以使用UILabel来显示你输入的文字,设置它控件中的属性Lines设置成0就会自动换行了~希望对你有帮助~

瑾兮 2017-09-17 1 楼

UITextField不支持多行文本输入,所以只能使用UITextView。在InterfaceBuilder中,可以把UITextField加入到UIToolbar上,但是不能把UITextView加到UIToolBar上。有两种办法解决这个问题,一种方法是在IB上先在UIToolbar上放一个UITextField占位,这个UITextField是在一个UIBarButtonItem中,另外添加一个和该UITextField大小一样的UITextView,在ViewDidLoad中,用代码将该UITextView设置成UIBarButtonItem的customView。另外一种方法就是不用IB,全部由代码控制,这样就可以不用多余的UITextField对象了。
控制UIToolBar随键盘的出现,上移到键盘的上方可以通过注册Notification事件来完成,示例代码如下:

-(void) registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
}

-(void) clearRegisterForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}

-(void) keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
NSValue* aValue = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
float keyboardHeight = [aValue CGRectValue].size.height
//调整根据keyboardHeight调整Toolbar和其他相关View的位置
...
}

-(void) keyboardWasHidden:(NSNotification*)aNotification
{
//还原Toolbar和相关View的位置
}

UITextView随输入内容的增长而改变高度可以通过使用UITextViewDelegate来完成,根据输入的内容计算相应的高度,然后调整UITextView的高度,同时也要调整ToolBar的高度。如下是代码示例:

-(void) textViewDidChange:(UITextView *)inTextView {
NSString *text = inTextView.text;
CGFloat fw = inputTextView.frame.size.width - 20;
CGSize maxContentSize = CGSizeMake(fw, INFINITY);
CGSize contentSize = [text sizeWithFont:inTextView.font
constrainedToSize:maxContentSize
lineBreakMode:UILineBreakModeWordWrap];

CGFloat delta = contentSize.height - currentInputTextHeight;
[self adjustTextViewHeight:delta];
}