0

我有什么

文本视图

NSArray(字符串)

AVAudioplayer(尚未实现)

当我在 TextView 中选择一个单词时

• 检查单词是否存在于数组中

• 启动带有相关声音的 Audioplayer

不幸的是,当我点击两次以在 TextView 中选择一个单词时,textViewDidChangeSelection 被调用了两次。我不知道为什么我会看到两次“Youpie”。

我只是将 inputView 更改为隐藏键盘,因为我只需要在选择模式下使用 TextView。

- (void)textViewDidChangeSelection:(UITextView *)tve;
{
    NSString *selectedText = [tve textInRange:tve.selectedTextRange];
    if(selectedText.length > 0)
    {
        for (NSString *text in textArray)
        {
            if ([selectedText isEqualToString:text])
            NSLog(@"Youpie");
            tve.selectedTextRange = nil;
            if (ps1.playing == YES)
            {
                [self stopEveryPlayer];
                [self updateViewForPlayerState:ps1];
            }
            else if ([ps1 play])
                {
                    [self updateViewForPlayerState:ps1];
                    fileName.text = [NSString stringWithFormat: @"%@ (%d ch.)", [[ps1.url relativePath] lastPathComponent], ps1.numberOfChannels, nil];
                }
                else
                    NSLog(@"Could not play %@\n", ps1.url);
            break;
            }
        }
    }
}

- (void)awakeFromNib
{  
    textArray = [[NSArray alloc] initWithObjects:@"dog",@"cat",@"person",@"bird",@"mouse",  nil];
    textView.inputView = [[[UIView alloc] initWithFrame:CGRectZero]  autorelease];
    textView.delegate = self;
// ...
}

当我双击文本中的每个好词时,我注意到了一些东西。

textViewDidChangeSelection

如果已经选择了一个单词并且没有选择任何操作,我有 1 个“Youpie”。

如果没有,我有 2 个“Youpie”。

我找到了一个简单的解决方案。获得价值后,我删除了 selectedRange。textViewDidChangeSelection 调用一次。

我改变了什么

tve.selectedTextRange = nil;

我使用一个子类UITextView来禁用菜单。

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    return NO;
    return [super canPerformAction:action withSender:sender];
}

AVAudioPlayer我也为(ps1)添加了一个实现。

如果选择了已知单词,我的“自动播放”正在工作:)

4

1 回答 1

1

对于该方法为何被调用两次或如何防止这种情况,我没有答案,但另一种解决方案可能是在编辑菜单中显示一个附加项目,当双击一个单词时该项目会在文本视图中弹出。然后,您可以从该附加菜单项中定义的操作选择器触发基于单词启动声音的操作。在此设计中,您将删除 textViewDidChangeSelection,因此不会被调用两次。有关修改标准菜单的更多信息,请参阅http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/AddingCustomEditMenuItems/AddingCustomEditMenuItems.html 。

于 2013-04-19T17:06:21.330 回答