1

テーブルビューのカスタム UITableViewCell 内に UITextView を持つアプリを開発しています。tableviewcell には、いくつかのジェスチャ認識機能があります。私の問題は、tableViewCell のレコグナイザーの前に textview がタッチに応答していることです。セルを別の場所に移動するための長いタップがありますが、代わりにテキストビューはコピー/貼り付け/虫眼鏡機能のためにテキストを選択しようとします。また、テキストビューはテーブルビュー自体からタッチを飲み込んでいるため、テキストビューに触れてスクロールを開始すると、テーブルビュー内でスクロールが機能しません。

editable プロパティが false に設定されていても、textview はテキストを選択して虫めがねを表示したいと考えています。

最初は、UITextView の代わりに UITextField を使用してすべてが機能していましたが、複数行のテキストのサポートが必要です。

では、テキストビューがタッチイベントを飲み込まないようにするにはどうすればよいですか? 任意の提案や考えをいただければ幸いです。

4

1 に答える 1

1

UITextViewに含まれるユーザー インタラクションを処理する方法は次のUITableViewCellとおりです。

1) 、およびUIViewControllerに準拠する必要があります。UITableViewDataSourceUITableViewDelegateUITextViewDelegate

#import <UIKit/UIKit.h>

@interace MyExampleController : UIViewController <UITableViewDataSource, UITableViewDelegate, UITextViewDelegate>

2) 最初に、テキスト ビューのuserInteractionEnabledプロパティはNO

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *textViewCellIdentifier = @"MyTextViewCellIdentifier";
     MyTextViewViewCell *cell = [tableView dequeueReusableCellWithIdentifier:textViewCellIdentifier];

     if (!cell)
     {
         // ... do your stuff to create the cell...
         cell.textView.userInteractionEnabled = NO;
         cell.textView.delegate = self;
     }

     // do whatever else to set the cell text, etc you need...

     return cell;
}

3) テキスト ビュー セルがUITableViewDelegateメソッドを介してタップされたかどうかを確認します。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    BOOL isTextViewCell = ... // do your check here to determine if this cell has a text view

    if (isTextViewCell)
    {
        [[(MyTextTableViewCell *)cell textView] setUserInteractionEnabled:YES];
        [[(MyTextTableViewCell *)cell textView] becomeFirstResponder];
    }
    else
    {
        // ... do whatever else you do...
    }
}

4) \ntextView がファーストレスポンダーを辞任するタイミングを決定するために確認します (ユーザーがreturnキーを押したときに渡されます)。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        if ([text rangeOfString:@"\n"].location != NSNotFound)
        {
            [textView resignFirstResponder];
            textView.
            return NO;
        }

        return YES;
    }

5) テキスト ビューが終了した後 (編集を終了)、テキストをモデルに保存します。

- (void)textViewDidEndEditing:(UITextView *)textView
{
    NSString *text = textView.text;
    // do your saving here    
}

これは主にその場で書いたものなので、小さなエラーがいくつかあるかもしれませんが、うまくいけば大まかなアイデアを得ることができます.

幸運を。

于 2013-09-07T05:54:23.990 に答える