0

私が持っているもの

テキストビュー

NSArray (文字列)

AVAudioplayer (未実装)

TextView で単語を選択すると:

•単語が配列に存在するかどうかを確認します

• 関連付けられたサウンドで Audioplayer を起動します

残念ながら、TextView 内の単語を選択するために 2 回タップすると、textViewDidChangeSelection が 2 回呼び出されます。なぜ「Youpie」を 2 回目にするのかわかりません。

選択モードで使用する必要があるのは TextView のみであるため、inputView を変更してキーボードを非表示にしました。

- (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

単語がすでに選択されていて、アクションが選択されていない場合、私は「Youpie」を 1 つ持っています。

そうでない場合は、「Youpie」が 2 つあります。

簡単な解決策を見つけました。値を取得した後、selectedRange を削除しました。textViewDidChangeSelection が 1 回呼び出されました。

私が変えたこと

tve.selectedTextRange = nil;

サブクラスを使用してUITextViewメニューを無効にします。

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

AVAudioPlayer(ps1)の実装も追加しました。

既知の単語が選択されている場合、私の「自動再生」は機能しています:)

4

1 に答える 1