UITextView
Interface Builder で管理されている があります。データ検出として、「リンク」にチェックを入れました。iOS 6 では、すべてが正常に機能し、リンクが強調表示されてクリック可能になります。ただし、iOS 7 では、すべてのリンクはプレーン テキストのままです。編集可能および選択可能なチェックボックスはオフになっています。
懸念されるのは、UITextView
が の内部にあるコンテナ ビューのサブビューであることUIScrollView
です。
UITextView
Interface Builder で管理されている があります。データ検出として、「リンク」にチェックを入れました。iOS 6 では、すべてが正常に機能し、リンクが強調表示されてクリック可能になります。ただし、iOS 7 では、すべてのリンクはプレーン テキストのままです。編集可能および選択可能なチェックボックスはオフになっています。
懸念されるのは、UITextView
が の内部にあるコンテナ ビューのサブビューであることUIScrollView
です。
今日、電話番号の検出に問題がありました。テキストを別のものに設定した後、 UITextView は古い電話番号を保持し、テキストを強調表示したままにしているように見えました。
テキストを新しい文字列に設定する前に Text:nil を設定すると、テキストビューがリセットされ、電話番号が通常どおり強調表示されることがわかりました。これは、iOS 7.0 の UITextView の何らかのバグではないかと考えています。
いずれにせよ、これは私にとってはうまくいきました。
iOS7が最初に登場したとき、これは私を悩ませ、このスレッドで答えを見つけました(実際の値を設定する前にUITextViewのテキスト属性をnilに設定してください)。その後、突然、問題 (私にとっては文字列全体がリンクとして強調表示されていた) が元に戻りました (iOS の更新が原因と思われます)。
最終的に私にとってのトリックは、テキスト属性の使用をやめ、属性テキストを設定することでした。これを行ったら、フォント/スクロール/選択可能/編集可能/などを設定する必要があります。プログラム的に、消えました。IBでUITextViewを定義し、必要に応じて値を設定し(スクロール不可、編集不可、選択可能、リンクと電話番号を検出)、属性付きの文字列を作成して設定しました:
myUITextView.attributedString = myAttributedString;
そして突然、すべてが期待どおりに機能しました。これが他の誰かに役立つことを願っています。
セル内textview
のデータ検出プロパティを使用するには、これらの行を追加する必要があることを確認してください。UItableView
txtvwMsgText.userInteractionEnabled = YES;
txtvwMsgText.dataDetectorTypes = UIDataDetectorTypeLink;
txtvwMsgText.scrollEnabled = NO;
txtvwMsgText.editable = NO;
txtvwMsgText.selectable = YES;
チェックアウトする必要がありNSDataDetector
ます。
これを使用して、さまざまなデータ (リンク、電話番号など) を見つけて処理できます。このサイトを見てください:
http://nshipster.com/nsdatadetector/
dataDetectorTypes
のプロパティを使用してUITextView
、コードで検出する対象を設定することもできます。ストーリーボードの移行の問題かもしれません。
textView.dataDetectorTypes = UIDataDetectorTypeLink;
いくつかのテストの後、解決策を見つけました。
リンクをアクティブにし、選択を有効にしたくない場合は、gestureRecognizers を編集する必要があります。
たとえば、3 つの LongPressGestureRecognizer があります。1 つはリンクのクリック (minimumPressDuration = 0.12)、2 番目は編集可能モードでのズーム (minimumPressDuration = 0.5)、3 番目は選択 (minimumPressDuration = 0.8) です。このソリューションは、編集モードで選択するための LongPressGestureRecognizer と、ズームするための秒を削除します。
NSArray *textViewGestureRecognizers = self.captionTextView.gestureRecognizers;
NSMutableArray *mutableArrayOfGestureRecognizers = [[NSMutableArray alloc] init];
for (UIGestureRecognizer *gestureRecognizer in textViewGestureRecognizers) {
if (![gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) {
[mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
} else {
UILongPressGestureRecognizer *longPressGestureRecognizer = (UILongPressGestureRecognizer *)gestureRecognizer;
if (longPressGestureRecognizer.minimumPressDuration < 0.3) {
[mutableArrayOfGestureRecognizers addObject:gestureRecognizer];
}
}
}
self.captionTextView.gestureRecognizers = mutableArrayOfGestureRecognizers;
iOS 9 でテスト済みですが、すべてのバージョン (iOS 7、8、9) で動作するはずです。それが役立つことを願っています!:)
したがって、有効、選択可能、スクロール不可、リンク検出不可の UITextView を使用することは、見た目ほど単純ではありません。iOS 8でこれに遭遇しました。したがって、私の解決策は、viewDidLoadでこのようなことを行い、textBoxの編集が完了したときに編集可能なプロパティをNOに設定することでした(通常はdoneIsTappedのようなメソッドになります)。ここでのコツは、テキスト値を textview に設定した後、 editable プロパティを NO に設定することです。これにより、UITextview でリンクが有効になります。
- (void)viewDidLoad
{
[super viewDidLoad];
self.txtViewComment.editable = YES;
self.txtViewComment.selectable = YES;
self.txtViewComment.dataDetectorTypes = UIDataDetectorTypeLink;
self.txtViewComment.scrollEnabled = NO;
}
と
- (IBAction)doneIsTapped:(id)sender
{
self.txtViewComment.text = @"set text what ever you want";
self.txtViewComment.editable = NO;
}
これにより、テキストビューでリンクが有効になりました。また、現時点では (または Apple がこの問題を修正するまで) ストーリー ボードを使用せず、不要な混乱を避けるためにコードのみを使用することをお勧めします。この助けを願っています。
UITextViews のスクロール機能を無効にすると、同様の設定でうまくいきました。
上記のどれもうまくいきませんでした。代わりに、次のようにしました。
[self.textView setDataDetectorTypes:UIDataDetectorTypeNone];
[self.textView.setTextColor:[UIColor whiteColor]];
[self.textView setDataDetectorTypes:UIDataDetectorTypeNone];
すべてのタイプを検出するはずで、検出されない色が白に設定されているテキストビューでこれを行いました。コードを変更して、検出する適切な色とリンクの種類を表すことができます。
このスレッドは古いですが、Swift でうまくいく答えが見つからなかったので、ここでは Swift 2.2 に行きます
textView.dataDetectorTypes = UIDataDetectorTypes.Link
textView.selectable = true
UITextView のスクロール プロパティを No にします。動作します... Self.textView.ScrollingEnable = NO;
プログラムで UITextview を追加する場合は、以下の行を追加するだけです。
_textView.userInteractionEnabled = YES;
_textView.dataDetectorTypes = UIDataDetectorTypeLink;
_textView.scrollEnabled = NO;
_textView.editable = NO;
これは私にとってはうまくいきました。
この回避策は私にとってはうまくいきます:
textView.selectable = YES;
textView.delegate = self;
- (void) textViewDidChangeSelection:(UITextView *)textView;
{
NSRange range = NSMakeRange(NSNotFound, 0.0);
if ( range.length && !NSEqualRanges(range, textView.selectedRange) ) {
textView.selectedRange = range;
}
}