私が持っているもの :
テキストビュー
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)の実装も追加しました。
既知の単語が選択されている場合、私の「自動再生」は機能しています:)