Swift - 多行文本输入框(UITextView)的用法
作者:hangge | 2015-01-16 11:25
(本文代码已升级至Swift4)
1,多行文本控件的创建
2,是否可编辑
3,内容是否可选
4,属性font设置字体,textColor设置字体颜色,textAlignment设置对齐方式

1,多行文本控件的创建
let textview = UITextView(frame:CGRect(x:10, y:100, width:200, height:100)) textview.layer.borderWidth = 1 //边框粗细 textview.layer.borderColor = UIColor.gray.cgColor //边框颜色 self.view.addSubview(textview)
textview.isEditable = false
textview.isSelectable = false
5,给文字中的电话号码和网址自动加链接
6,自定义选择内容后的菜单
textview.dataDetectorTypes = [] //都不加链接 textview.dataDetectorTypes = UIDataDetectorTypes.phoneNumber //只有电话加链接 textview.dataDetectorTypes = UIDataDetectorTypes.link //只有网址加链接 textview.dataDetectorTypes = UIDataDetectorTypes.all //电话和网址都加
我们在看新闻或小说的时候,常常在点选文字后会弹出菜单进行选择,复制等操作。我们可以在这个菜单上添加一些其他内容,如加上“邮件”“微信”等按钮选项

import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let textview = UITextView(frame:CGRect(x:10, y:100, width:200, height:100))
textview.layer.borderWidth = 1 //边框粗细
textview.layer.borderColor = UIColor.gray.cgColor //边框颜色
self.view.addSubview(textview)
let mail = UIMenuItem(title: "邮件", action: #selector(ViewController.onMail))
let weixin = UIMenuItem(title: "微信", action: #selector(ViewController.onWeiXin))
let menu = UIMenuController()
menu.menuItems = [mail,weixin]
}
@objc func onMail(){
print("mail")
}
@objc func onWeiXin(){
print("weixin")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
全部评论(12)
@objc func onMail(){
print("mail")
}
@objc func onWeiXin(){
print("weixin")
}
swift4里面自动纠正成了这样
站长回复:多谢你的提醒,代码现已更新。
站长求助,有没有什么办法可以修改UITextView的行间距呢?有的第三方字体在软件中使用的话会显得很挤!谢谢!
站长回复:要通过NSAttributedString来设置,我这几天刚好会写篇相关文章,你可以关注下。
为什么我在#selector那里按钮这样写会报错呢?
站长回复:我有测试了下是没问题的啊。还有你检查下Xcode是不是还没升级成8.0。
let mail = UIMenuItem(title: "邮件", action: "onMail")
航哥,这句代码会警告!
/Users/zyy/Desktop/屏幕快照 2016-07-21 下午3.02.13.png
站长回复:多谢提醒,这个代码写的比较早,后来Swift语法有变。现已修正。
航哥,我想在UITextView插入图片之后,让光标换行,或者换两行,让接下来的编辑是在图片下两行里重头输入,有什么办法吗,另外能不能把UITextView里的NSAttributedString转换成html上传给服务器呢
站长回复:图文混排我原来也没做过,暂时帮不了你了。不过我后面会找时间研究下,有结果的话到时写篇相关文章。
请教一下:我有一个textviiew,里面内容很多,出了纵向滚动条,怎么能让textview第一次显示的时候,显示最上面,而不是显示最下面呢
站长回复:textview默认情况下不管文字多少都是显示最上面的内容的啊。也就滚动条本来就在最上面,而不是最下面。
我想在TextView中显示不可编辑文本,像文档或者小说一样,但是换行符和首行缩进等功能都没办法用,请问该如何解决?
站长回复:试试这个:
如果 我想点击链接的时候跳转到 APP内的 UIWebView 界面怎么做,有没有什么代理方法之类的
站长回复:有的,使用UITextViewDelegate代理的shouldInteractWithURL方法可以在链接点击的时候实现拦截,然后你可以做自己想要的操作。
我一个文本框要他在可编辑和不可编辑之间切换要怎么做?
站长回复:修改editable属性即可:textView.editable = false 表示不可以编辑。为true表示可以编辑。
let menu = UIMenuController() 这里报错了 请问下为什么恩??
错误:swift[3204:934090] *** Assertion failure in -[UIMenuController init], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UIMenuController.m:97
站长回复:我又测试了下是没问题的,不太清楚你报错的原因。
刚刚入门学习,不太清楚 UITextInput 和 UITextView、UITextField 这些框架的区别?好像 Hangle 也没有一篇关于 UITextInput 的文章?另外问一下 iOS 能否实现调用听写功能(不调出键盘)。一直在跟着 Hangge 的文章自学,很感谢 Hangge !
站长回复:ios输入组件只有UITextField和UITextView,区别前者是单行文本框后者是多行文本框。(而UITextInput是协议不是控件)
听写功能指的是语音输入吗,目前苹果没有开发系统语音输入的api,只能通过键盘实现语音输入。
代码的错误很多,再者,效果出不来
站长回复:多谢提醒,有些文章写得比较早,现在Swfit2改了许多语法。现已修正,如果还发现其他文章有问题可以给我留言。