UILabel 中的按钮/链接以切换到另一个 ViewController
Posted
技术标签:
【中文标题】UILabel 中的按钮/链接以切换到另一个 ViewController【英文标题】:Button/Link inside UILabel to switch to another ViewController 【发布时间】:2015-02-18 14:19:47 【问题描述】:我想在我的 ios 应用中显示一些 Facebook 帖子。我从 Graph API 将整个帖子作为 JSON 对象获取。效果很好。
因此,如果用户发布新帖子并标记此帖子中的任何页面,则用户 ID(或页面 ID)也包含在该 JSON 对象中,为我提供文本内的偏移量和长度,这应该链接到该页面。 (听起来很奇怪,我举个例子):
"id": "135416986571191_709831435796407",
"from":
"category": "Musician/band",
"name": "DANNIC",
"id": "135416986571191"
,
"to":
"data": [
"category": "Musician/band",
"name": "Tom & Jame",
"id": "423531801036780"
,
"category": "Record label",
"name": "Revealed Recordings",
"id": "104563552952573"
]
,
"message": "Wait For You (Tom & Jame Remix) is coming out in 2 days on Revealed Recordings!",
"message_tags":
"14": [
"id": "423531801036780",
"name": "Tom & Jame",
"type": "page",
"offset": 14,
"length": 10
],
"59": [
"id": "104563552952573",
"name": "Revealed Recordings",
"type": "page",
"offset": 59,
"length": 19
]
,
"picture": "https://fbcdn-vthumb-a.akamaihd.net/hvthumb-ak-xfa1/v/t15.0-10/10876067_709831642463053_709831435796407_64260_924_b.jpg?oh=49c825ff152d98de125820093b5cff05&oe=5551397E&__gda__=1431085295_7c41923cf64cc0946a39e85b705ee691",
....
....
如您所见,有“message_tags”,其中包含两个页面ID,即名称和偏移量和长度。我想用 UIButton 或只是指向该页面的链接替换“消息”中的文本。我该怎么做?
这是该帖子在 Facebook 应用程序中的外观截图:
如您所见,“Tom & Jame”是可点击的,其余部分(“Revealed Recordings”除外)是普通文本。如果您点击“Tom & Jame”,它将切换到另一个视图控制器,显示它们的页面。这正是我在应用中想要的。
我知道我可以使用 NSAttributedText 作为标签,并使用 NSLinkAttributedName 使文本可点击。但我不希望我的应用切换到 safari 并打开 facebook 页面,我想留在我的应用中并切换到另一个 UIViewController,显示该页面的信息等。
即使我留在我的应用程序中,我也可以为该链接使用我的应用程序的 url 方案吗?或者我可以在该标签中放置一个 UIButton 并在我的视图控制器中处理点击吗?
什么是最好的解决方案?任何帮助表示赞赏! :)
【问题讨论】:
如果你想使用列表,那么表格视图可以派上用场,因为它有它的委托方法来选择表格单元格中的特定项目,或者如果 UI 不是面向列表的,那么在这种情况下你可以在 UIButton 中显示文本并为其添加操作。 我有一个带有自定义单元格的表格视图。该单元格包含一个 UILabel,其中包含几行“消息”。如果该帖子中链接了一个页面,我希望该页面是可点击的。你到底什么意思?我应该在 UILabel 里面放一个 UIButton 吗? 您是否尝试过使用表格“在索引路径处选择行”的委托方法,而不是在自定义单元格中使单个组件可clicable 为什么不在委托方法中编写导航代码?或者你已经试过了吗? 我想你不明白我的意思。让我编辑我的问题。 编辑了,希望你知道我现在想要什么。 【参考方案1】:我要做的是将文本放入UITextView
并使用NSAttributedText
。我会以稍后可以解析的方式构建 URL(足以让 UITextView
呈现链接,但它不必是 facebook 上的真实 URL)。
然后我将覆盖发送给UITextView
代表的shouldInteractWithURL
。在这里,我可以重新解析 URL、检索数据并加载我的后续视图控制器。
看看这里的参考:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextViewDelegate_Protocol/index.html#//apple_ref/occ/intfm/UITextViewDelegate/textView:shouldInteractWithURL:inRange:
【讨论】:
我已经实现了 UITextView 和委托方法,似乎工作。唯一的事情是:如果我将文本视图中的链接检测设置为 true,它有时会使整个文本成为链接,而不仅仅是 URL 本身。如果我设置 'textView.attributedText = ...' 我的应用程序崩溃了? OK 忘了我说的,在使用 Swift 时似乎是 Xcode 中的一个错误。现在似乎可以工作了!以上是关于UILabel 中的按钮/链接以切换到另一个 ViewController的主要内容,如果未能解决你的问题,请参考以下文章