Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使UILabel中的特定单词可选择(Swift 2.0)?_Ios_Swift_Uilabel_Nsattributedstring - Fatal编程技术网

Ios 如何使UILabel中的特定单词可选择(Swift 2.0)?

Ios 如何使UILabel中的特定单词可选择(Swift 2.0)?,ios,swift,uilabel,nsattributedstring,Ios,Swift,Uilabel,Nsattributedstring,我一整天都在面对一个可能有一个简单解决方案的大问题。我有一个ui标签,其中包含一个nsattributed字符串。我希望ui标签中的特定范围可以点击。我不想要任何第三方功能 以下是我的示例代码: let str = dict["itemName"] as! NSString range = string.rangeOfString(dict["itemName"] as! String)! index = string.startIndex.distanceTo(range.startIndex

我一整天都在面对一个可能有一个简单解决方案的大问题。我有一个
ui标签
,其中包含一个
nsattributed字符串
。我希望
ui标签中的特定范围可以点击。我不想要任何第三方功能

以下是我的示例代码:

let str = dict["itemName"] as! NSString
range = string.rangeOfString(dict["itemName"] as! String)!
index = string.startIndex.distanceTo(range.startIndex)
attributedString.addAttribute(NSForegroundColorAttributeName, value: color, range: NSRange(location: index, length: str.length))

您可以使用UITextview并向其添加点击手势,而不是使用UILabel。下面是一个例子,通过你可以达到同样的效果

/* Set Tap gesture on Text view */

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResponse:)];
tapGesture.numberOfTapsRequired = 1;
[yourTextView addGestureRecognizer:tapGesture];

- (void) tapResponse:(UITapGestureRecognizer *)recognizer
{

UITextView *textView =  (UITextView *)recognizer.view;
CGPoint location = [recognizer locationInView:textView];

CGPoint position = CGPointMake(location.x, location.y);

//get location in text from textposition at point
UITextPosition *tapPosition = [textView closestPositionToPoint:position];

//fetch the word at this position (or nil, if not available)
UITextRange *textRange = [textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight];
NSString *tappedWord = [textView textInRange:textRange];

NSLog(@"tapped word : %@", tappedWord);    
}

您可以使用UITextview并向其添加点击手势,而不是使用UILabel。下面是一个例子,通过你可以达到同样的效果

/* Set Tap gesture on Text view */

UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResponse:)];
tapGesture.numberOfTapsRequired = 1;
[yourTextView addGestureRecognizer:tapGesture];

- (void) tapResponse:(UITapGestureRecognizer *)recognizer
{

UITextView *textView =  (UITextView *)recognizer.view;
CGPoint location = [recognizer locationInView:textView];

CGPoint position = CGPointMake(location.x, location.y);

//get location in text from textposition at point
UITextPosition *tapPosition = [textView closestPositionToPoint:position];

//fetch the word at this position (or nil, if not available)
UITextRange *textRange = [textView.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularityWord inDirection:UITextLayoutDirectionRight];
NSString *tappedWord = [textView textInRange:textRange];

NSLog(@"tapped word : %@", tappedWord);    
}
并在委托方法中得到结果

-(void)textview:(UITextView *)clickableTextView clickedText:(NSString *)text {
}
并在委托方法中得到结果

-(void)textview:(UITextView *)clickableTextView clickedText:(NSString *)text {
}

Swift 2.0:

为此,最好使用UITextView

1)做出轻触手势并添加到UITextView。 重写func viewDidLoad(){ super.viewDidLoad()

2) 添加获取所选单词的方法

func tapResponse(recognizer: UITapGestureRecognizer) {
        let location: CGPoint = recognizer.locationInView(sampleTextView)
        let position: CGPoint = CGPointMake(location.x, location.y)
        let tapPosition: UITextPosition = sampleTextView.closestPositionToPoint(position)!
        let textRange: UITextRange = sampleTextView.tokenizer.rangeEnclosingPosition(tapPosition, withGranularity: .Word, inDirection: 1)!

        let tappedWord: String = sampleTextView.textInRange(textRange)!
        print("tapped word : %@", tappedWord)
    }

Swift 2.0:

为此,最好使用UITextView

1)做出轻触手势并添加到UITextView。 重写func viewDidLoad(){ super.viewDidLoad()

2) 添加获取所选单词的方法

func tapResponse(recognizer: UITapGestureRecognizer) {
        let location: CGPoint = recognizer.locationInView(sampleTextView)
        let position: CGPoint = CGPointMake(location.x, location.y)
        let tapPosition: UITextPosition = sampleTextView.closestPositionToPoint(position)!
        let textRange: UITextRange = sampleTextView.tokenizer.rangeEnclosingPosition(tapPosition, withGranularity: .Word, inDirection: 1)!

        let tappedWord: String = sampleTextView.textInRange(textRange)!
        print("tapped word : %@", tappedWord)
    }

你能提供一个例子吗?你能提供一个例子吗?但我在uitableview单元格中填充值,但我在uitableview单元格中填充值要求UILabel,而不是UITextViewAsquired要求UILabel,而不是UITextView