Swift - 给UITextView添加自定义链接,以及链接的点击响应
来源:互联网 发布:建筑大数据分析 编辑:程序博客网 时间:2024/06/18 11:44
我们知道多行文本框(UITextView)具有URL检测功能,将其开启后,它会高亮显示内容中的url链接文字,点击后会使用safari打开这个链接。
1,让textView支持自定义链接
除了能够用浏览器打开url链接外,有时我们还想让内容中的链接能实现一些个性化的功能需求。比如:点击“查看详细说明”后,APP会跳转到功能说明页面。而点击“问题反馈”链接时,又会到进行问题反馈操作。
除了能够用浏览器打开url链接外,有时我们还想让内容中的链接能实现一些个性化的功能需求。比如:点击“查看详细说明”后,APP会跳转到功能说明页面。而点击“问题反馈”链接时,又会到进行问题反馈操作。
2,实现原理:
(1)对于这些特殊的链接我们使用自定义的一些 URL scheme 来表示。比如:about:代表详细说明,feedback:代表问题反馈。
(2)通过拼接 NSMutableAttributedString 的方式,将各个带链接属性、不带链接属性的文本拼接起来,赋值给textview。
(3)使用textview的 UITextFieldDelegate 代理的 shouldInteractWithURL 方法,我们可以捕获到这些自定义的URL scheme点击,然后通过判断 URL.scheme 来执行不同的操作。
(1)对于用来显示的textview,要将其 Detection Links(链接检测)打勾,去掉 Editable(使其不可编辑)。
(2)为方便使用,扩展UITextView:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
extension
UITextView
{
//添加链接文本(链接为空时则表示普通文本)
func
appendLinkString(string:
String
, withURLString:
String
=
""
) {
//原来的文本内容
let
attrString:
NSMutableAttributedString
=
NSMutableAttributedString
()
attrString.appendAttributedString(
self
.attributedText)
//新增的文本内容(使用默认设置的字体样式)
let
attrs = [
NSFontAttributeName
:
self
.font!]
let
appendString =
NSMutableAttributedString
(string: string, attributes:attrs)
//判断是否是链接文字
if
withURLString !=
""
{
let
range:
NSRange
=
NSMakeRange
(0, appendString.length)
appendString.beginEditing()
appendString.addAttribute(
NSLinkAttributeName
, value:withURLString, range:range)
appendString.endEditing()
}
//合并新的文本
attrString.appendAttributedString(appendString)
//设置合并后的文本
self
.attributedText = attrString
}
}
(3)样例代码 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import
UIKit
class
ViewController
:
UIViewController
,
UITextViewDelegate
{
@IBOutlet
weak
var
textView:
UITextView
!
override
func
viewDidLoad() {
super
.viewDidLoad()
//设置展示文本框的代理
textView.delegate =
self
textView.text =
""
textView.appendLinkString(
"欢迎使用航歌APP!\n"
)
textView.appendLinkString(
"(1)"
)
textView.appendLinkString(
"查看详细说明"
, withURLString:
"about:from123"
)
textView.appendLinkString(
"\n(2)"
)
textView.appendLinkString(
"问题反馈"
, withURLString:
"feedback:from234"
)
}
//链接点击响应方法
func
textView(textView:
UITextView
, shouldInteractWithURL
URL
:
NSURL
,
inRange characterRange:
NSRange
) ->
Bool
{
switch
URL
.scheme {
case
"about"
:
showAlert(
"about"
,
payload:
URL
.resourceSpecifier.stringByRemovingPercentEncoding!)
case
"feedback"
:
showAlert(
"feedback"
,
payload:
URL
.resourceSpecifier.stringByRemovingPercentEncoding!)
default
:
print
(
"这个是普通的url"
)
}
return
true
}
//显示消息
func
showAlert(tagType:
String
, payload:
String
){
let
alertController =
UIAlertController
(title:
"检测到\(tagType)标签"
,
message: payload, preferredStyle: .
Alert
)
let
cancelAction =
UIAlertAction
(title:
"确定"
, style: .
Cancel
, handler:
nil
)
alertController.addAction(cancelAction)
self
.presentViewController(alertController, animated:
true
, completion:
nil
)
}
}
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1104.html
1 0
- Swift - 给UITextView添加自定义链接,以及链接的点击响应
- 给UITextView增加链接
- 给UITextView增加链接
- 给UITextView增加了链接
- [Swift]iOS 开发:给 UITextView 添加占位符的方法
- 给按钮添加链接
- 链接点击前后的颜色设置以及消除链接下划线
- 给已经发布的flash添加链接
- 给特定的值添加链接
- 给特定的值添加链接(续)
- 给swf添加链接的方法
- Flex中如何给一个按钮添加链接,点击链接打开一个网页呢?
- uilabe下划线以及响应链接
- UITextview 给给定的字符串添加link属性 指定字符串添加点击方法
- Qt添加自定义控件并在qtDesigner中使用以及链接失败的解决方法
- 给按钮添加一个链接
- 给flash添加A链接
- miniui给列添加链接
- html5基础知识
- elasticsearch java api 之搜索功能
- android使用PullToRefresh实现上拉加载和下拉刷新效果
- POJ2034 线性筛+DFS(下午第二节课给小裴和诗洋同学表演手打一遍过...)
- 欢迎使用CSDN-markdown编辑器
- Swift - 给UITextView添加自定义链接,以及链接的点击响应
- tensorflow学习笔记二——建立一个简单的神经网络
- http中GET和POST的区别
- 数据库中字段类型对应的C#中的数据类型
- 学习Android CoordinatorLayout(二)
- 获取List中的数据的实现方法
- 多线程的相关知识及代码的实现
- 选择排序(java)
- C#调用C++的DLL搜集整理的所有数据类型转换方式