我與它建立了這樣的歸因文本的UITextView
:攻絲中的UITextView一個NSLinkAttributeName鏈接不是在iOS中工作9
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"This is a message.\nClick here for more info"];
textView.linkTextAttributes = @{NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle)};
NSRange linkRange = [attributedString.string rangeOfString:@"Click here for more info"];
[attributedString addAttribute:NSLinkAttributeName value:@"" range:linkRange];
textView.attributedText = attributedString;
UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(infoTapped:)];
[textView addGestureRecognizer:tapRecognizer
然後我抓住一個水龍頭這樣的:
- (void)infoTapped:(UITapGestureRecognizer *)tapGesture {
if (tapGesture.state != UIGestureRecognizerStateEnded) {
return;
}
UITextView *textView = (UITextView *)tapGesture.view;
CGPoint tapLocation = [tapGesture locationInView:textView];
UITextPosition *textPosition = [textView closestPositionToPoint:tapLocation];
NSDictionary *attributes = [textView textStylingAtPosition:textPosition inDirection:UITextStorageDirectionForward];
NSString *link = attributes[NSLinkAttributeName];
if (link) {
// Do stuff
}
}
在iOS 10中,這工作正常,我能夠檢測到NSLinkAttributeName
屬性。 但是,在iOS 9中,撥打[textView closestPositionToPoint:tapLocation]
的電話將返回nil
,我無法從此處進行任何操作。
Btw。我的textview有editable
和selectable
設置爲NO。我知道有人說selctable
需要設置爲YES,但我不確定它是否屬實。首先,它在iOS 10中無需選擇就可以正常工作。其次,如果我將其設置爲可選,則它可以工作,但僅適用於其他類型。我確實在iOS 9中獲得了水龍頭,但它只能工作不正常(在9和10中)。有時它會記錄水龍頭,有時它不會。基本上,當我看到鏈接突出顯示時,例如當您單擊瀏覽器中的鏈接時,它不會註冊。此外,現在可以選擇我不想要的文本視圖中的文本。
我真的更喜歡UITextView中的文本不能被選擇,因爲它有時會帶來一些醜陋的行爲,但是由於我無法使它在沒有它的情況下工作,我選擇了你的方法。 – pajevic