2013-10-10 50 views
4

任何人都知道我可以如何使IOSKE中的註釋文本中的#KEY和@NAME可點擊(例如,Instagram會這樣做)?我試圖用NSMutableAttributedString,但我不知道如何下方點擊@username應採取用戶到用戶的配置文件如何使#key和@key在IOS7中點擊

enter image description here

+1

哪裏的「標籤」顯示全世界展示這個在介紹文字套件會議?在一個應用程序?在'UITextField'中? – Raptor

+0

嗨@ShivanRaptor它發生在應用程序中。基本上,如果用戶在他們的評論中鍵入#key,當評論被呈現時,我們想要點擊#key並獲得一些搜索結果 – nightograph

+0

當你說評論時,它是基於Web的UIWebView?我很困惑。更好地向我們展示代碼和屏幕截圖。 – Raptor

回答

7

看着UITextViewDelegate protocol,在iOS7中有一個新的方法:textView:shouldInteractWithURL:inRange:

您沒有共享任何代碼,但可以安全地假設您有一個代表您變藍的區域的attributedStringrange。我還假設你可以將用戶名提取到名爲username的變量中。

使用這三條信息,您可以爲該範圍添加鏈接屬性。

[attributedString addAttribute:NSLinkAttributeName 
         value:[@"username://" stringByAppendingString:username] 
         range:range]; 

在您的代理,你可以做這樣的事情:

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange 
{ 
    if ([URL.scheme isEqualToString:@"username"]) { 
     [self doSomethingWithUserName:URL.host]; 
     return NO; 
    } 

    return YES; 
} 

我相信他們在WWDC 2013年

+0

不錯的答案隊友! –

0

你可以看看使用DTCoreText檢測單擊事件,圖像中它提供了鏈接按鈕,你可以添加到屬性文本。它基於HTML解析,因此您需要在解析時做一些額外的工作來確定鏈接按鈕的位置。

或者,您可以在評論視圖中添加輕拍手勢識別器。當檢測到水龍頭時,您可以使用<UITextInput>找出所點擊的文字以及是否爲「鏈接」。

1

您可以使用HTML鏈接,並使用UIWebView

<div> Here goes the text. <a href="https://stackoverflow.com/users/Username">@Username</a> <a href="/tags/mytag">#mytag</a>. </div>

當用戶點擊一個鏈接使其,網頁視圖的委託方法webView:shouldStartLoadWithRequest:navigationType:被調用。在那裏你可以從請求中獲得URL並做你想做的任何事情。從此方法返回NO很重要,否則Web視圖會嘗試加載請求。

+0

我在其中一個應用中使用了這種方法,這是最簡單的方法,適用於大多數iOS版本(包括舊版本)。副作用是,加載速度很慢(除非在向用戶顯示之前預先渲染),並且「UIWebView」的大小如果不是全屏,則必須進行額外的調整大小。 – Raptor