2013-10-10 3 views
4

IOS7의 주석 텍스트에서 #KEY 및 @NAME을 어떻게 클릭 할 수 있는지 알 수 있습니다 (예 : instagram에서와 같은 방식). 내가 NSMutableAttributedString을 사용하려고하지만 @username이IOS7에서 #key 및 @key를 클릭하는 방법

enter image description here

+1

에서 소개 텍스트 키트 세션에서이 시연 생각 ? 앱에서? 'UITextField'에서? – Raptor

+0

안녕하세요 @ ShivanRaptor 그것은 앱에서 발생합니다. 기본적으로 사용자가 주석에 #key를 입력하면 해당 주석이 렌더링 될 때 #key를 클릭하고 주석을 말할 때 – nightograph

+0

에 대한 검색 결과를 얻으려는 경우 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을 반환하는 것이 중요합니다. 그렇지 않으면 웹보기가 요청을로드하려고 시도합니다.

+0

저는이 방법을 Apps 중 하나에서 사용했습니다.이 방법은 대부분의 iOS 버전 (이전 버전 포함)에서 작동하는 가장 간단한 방법입니다. 부작용은 로딩 속도가 느리다는 것이다 (사물이 사용자에게 보여지기 전에 미리 렌더링되지 않는다면). UIWebView의 크기는 전체 화면이 아닌 경우 여분의 크기 조정을해야한다. – Raptor

관련 문제