UILabelはありますが、ユーザーがそのテキストの一部を選択できるようにする方法を教えてください。ユーザーがテキストを編集したり、ラベル/テキストフィールドを編集して境界線を表示したりしたくない。
UILabel
では使用できません。
そのためにUITextField
を使用する必要があります。 textFieldShouldBeginEditing
デリゲートメソッドを使用して編集を無効にします。
UITextViewを作成して、その.editable
からNO。次に、(1)ユーザーが編集できない(2)境界線がなく、(3)ユーザーがそこからテキストを選択できるテキストビューがあります。
テキストビューを使用できない場合、またはテキストビューを使用する必要がない場合、コピーアンドペーストの貧乏人向けのバージョンは、ジェスチャレコグナイザーをラベルに追加し、テキスト全体をペーストボードにコピーすることです。 UITextView
を使用しない限り、一部だけを実行することはできません
コピーされたことをユーザーに知らせ、シングルタップジェスチャと長押しの両方をサポートしていることを確認してください。テキストの一部を強調表示しようとするユーザーをピックアップします。開始するためのサンプルコードを次に示します。
ラベルを作成するときに、ジェスチャレコグナイザーをラベルに登録します。
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(textTapped:)];
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(textPressed:)];
[myLabel addGestureRecognizer:tap];
[myLabel addGestureRecognizer:longPress];
[myLabel setUserInteractionEnabled:YES];
次に、ジェスチャーを処理します。
- (void) textPressed:(UILongPressGestureRecognizer *) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateRecognized &&
[gestureRecognizer.view isKindOfClass:[UILabel class]]) {
UILabel *someLabel = (UILabel *)gestureRecognizer.view;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:someLabel.text];
...
//let the user know you copied the text to the pasteboard and they can no paste it somewhere else
...
}
}
- (void) textTapped:(UITapGestureRecognizer *) gestureRecognizer {
if (gestureRecognizer.state == UIGestureRecognizerStateRecognized &&
[gestureRecognizer.view isKindOfClass:[UILabel class]]) {
UILabel *someLabel = (UILabel *)gestureRecognizer.view;
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
[pasteboard setString:someLabel.text];
...
//let the user know you copied the text to the pasteboard and they can no paste it somewhere else
...
}
}