首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使UILabel中的特定单词可选(Swift 2.0)?

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

Stack Overflow用户
提问于 2015-12-29 22:58:04
回答 3查看 3K关注 0票数 0

我一直在面对一个很大的问题,可能一整天都有一个简单的解决方案。我有一个包含NSAttributedStringUILabel。我希望UILabel中的一个特定范围是可点击的。我不想要任何第三方功能。

下面是我的示例代码:

代码语言:javascript
运行
复制
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))
EN

回答 3

Stack Overflow用户

发布于 2015-12-30 00:24:17

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

代码语言:javascript
运行
复制
/* 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);    
}
票数 7
EN

Stack Overflow用户

发布于 2016-01-01 00:41:36

代码语言:javascript
运行
复制
**ClickableTextView.h**

@protocol ClickableTextViewDelegate <NSObject>

@required
-(void)textview:(UITextView *)clickableTextView clickedText:(NSString *)text;

@end

@interface ClickableTextView : UITextView

@property (weak, nonatomic) id <ClickableTextViewDelegate> tapDelegate;

-(instancetype)initWithDelegate:(id)delegate;

@end


**ClickableTextView.m**

-(void)awakeFromNib {
    [super awakeFromNib];

    [self setProperties];
}


-(void)setProperties {

  self.userInteractionEnabled = YES;
  self.editable = NO;
  self.scrollEnabled = NO;
  self.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
  self.dataDetectorTypes = UIDataDetectorTypeLink;
  self.backgroundColor = [UIColor clearColor];

  /* Set Tap gesture on Text view */
  UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapResponse:)];
  tapGesture.numberOfTapsRequired = 1;
  [self 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); 

if(tappedWord) {

    if([self.tapDelegate respondsToSelector:@selector(textview:clickedText:)]){
        [self.tapDelegate textview:self clickedText:tappedWord];
    }
 }

}

在TableViewCell中使用此自定义类而不是UITextView,然后在

代码语言:javascript
运行
复制
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

并在委托方法中获得结果。

代码语言:javascript
运行
复制
-(void)textview:(UITextView *)clickableTextView clickedText:(NSString *)text {
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-11 17:32:31

Swift 2.0:

最好使用UITextView来实现此目的。

1)制作TapGesture并添加到UITextView中。覆盖函数viewDidLoad() { super.viewDidLoad()

代码语言:javascript
运行
复制
    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapResponse:")
    tapGesture.numberOfTapsRequired = 1
    sampleTextView.addGestureRecognizer(tapGesture)    
}

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

代码语言:javascript
运行
复制
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)
    }
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34513578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档