例如,我有一行
这是一个测试
点击每个单词后,会产生相应的声音。现在我将通过不同的方法来实现它,我发现了NSMutableAttributedString
。您可以为单个单词添加属性,如图像或字体等。我的问题是,是否有任何属性可以将声音添加到字母组中。或者你能提出更好的方法吗?任何帮助表示赞赏。
答案 0 :(得分:1)
使用属性字符串,您可以为单击的每个单词调用您的方法,然后您可以在识别单词后播放相应的声音。 属性字符串允许您添加自定义属性,然后识别不同的单词类别并相应地应用不同的操作
首先添加识别器
UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(textTapped:)];
然后在你的方法
- (void)textTapped:(UITapGestureRecognizer *)recognizer
{
UITextView *textView = (UITextView *)recognizer.view;
// Location of the tap in text-container coordinates
NSLayoutManager *layoutManager = textView.layoutManager;
CGPoint location = [recognizer locationInView:textView];
location.x -= textView.textContainerInset.left;
location.y -= textView.textContainerInset.top;
NSLog(@"location: %@", NSStringFromCGPoint(location));
// Find the character that's been tapped on
NSUInteger characterIndex;
characterIndex = [layoutManager characterIndexForPoint:location
inTextContainer:textView.textContainer
fractionOfDistanceBetweenInsertionPoints:NULL];
if (characterIndex < textView.textStorage.length) {
NSRange range;
NSDictionary *attributes = [textView.textStorage attributesAtIndex:characterIndex effectiveRange:&range];
NSLog(@"%@", NSStringFromRange(range));
}
}
enter code here
如果您添加了服装属性
[paragraph addAttribute:@"hashtag" value:@(YES) range:wordRange];
您可以使用
找到它 NSDictionary *attributes = [textView.textStorage attributesAtIndex:characterIndex effectiveRange:&range];
//Based on the attributes, do something
if ([attributes objectForKey:@"hashtag"]) {
NSLog(@"hashtag");
NSLog(@"clicked: %@",[textView.text substringWithRange:range] );
}
答案 1 :(得分:0)
主要任务是在用户触摸单词并识别单词时收到通知。
您可以将URL(具有特殊格式)添加到任何单词,并在用户单击时订阅通知(作为textView的委托)。 例如,您可以为&#34; word&#34;:
创建此网址soundscheme://word
如何使用带有字符串的URL和订阅作为UITextView的委托,您可以阅读here。 委托方法可以是这样的:
-(BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange{
// Play sound here
return NO;
}
此外,您可以使用TTTAttributedLabel在用户触摸网址时获取操作,它支持委托方法来通知网址的触摸。