1

私は IPAD でリーダー アプリケーションを実行しています。本のデータは Sqlite DB に保存されています。この DB のコンテンツをコア テキストを介してビューにレンダリングします。テキストの形式は次のようになります。2 これは iPad です。3 マックです。などなど..テキストに触れているときにタッチ イベントを取得したいだけです。たとえば、最初の文をタップした場合、最初の文のみを任意の色で選択し、ポップアップ (サブビューまたはアラート ビューまたはアクション シート) をトリガーする必要があります。下の画像のようにここに画像の説明を入力

ビューに表示されるテキストを作成するためのこのコードがあります

NSMutableString *combined = [NSMutableString string];

    for(NSUInteger idx = 0; idx < [delegatee.allSelectedVerseEnglish count]; idx++) {
        [combined appendFormat:@"  %d %@", 
         idx + 1, 
         [delegatee.allSelectedVerseEnglish objectAtIndex:idx]];

    }

    self.multiPageView.text =combined;

combined文字列には、選択した章の聖書の詩が含まれているため、最初の詩をクリックすると、下の画像のように選択する必要があり、下の画像のようなサブビューまたは警告ビューがポップアップし、その選択によってその詩を保存する必要がありますどこかに入れるか、クリップボードにコピーします。multiPageViewオリーブの木の聖書アプリケーションや ibook と同じように、コア テキスト .i want をレンダリングするビューです。

Web ビューにはいくつかの制限があるため、Web ビューを使用していません。これを行う方法はありますか。助けてください。前もって感謝します。編集:

- (void)textViewDidEndEditing:(UITextView *)textView
{

    mainpopupview.frame =CGRectMake(0, 0, 768, 1004)    ;
    [self.view addSubview:mainpopupview];

    NSRange selectedRange = [textView selectedRange];
    NSString *backString = [maintextview.text substringToIndex:selectedRange.location];
    NSRange backRange = [backString rangeOfString:@"." options:NSBackwardsSearch];
    NSRange backRangee = [backString rangeOfString:@"." options:NSBackwardsSearch];
    int  myRangeLenght = backRangee.location - backRange.location;
    NSRange myStringRange = NSMakeRange (backRange.location, myRangeLenght);
    NSString *forwardString  = [maintextview.text substringFromIndex:backRange.location];
    NSLog(@"%@",[[forwardString componentsSeparatedByString:@"."] objectAtIndex:1]);
    NSLog (@"%@",  [maintextview.text substringWithRange:myStringRange]);

    NSString * myStringTxt = [[forwardString componentsSeparatedByString:@"."] objectAtIndex:1];
    NSLog(@"1 %@", myStringTxt);

      //  maintextview.textColor = [UIColor yellowColor];

    NSRange myStringRangee = [maintextview.text rangeOfString:myStringTxt];
    [maintextview select:self];
    maintextview.selectedRange = myStringRangee;
    }

myStringTxt には正しい verse(menz text between .to .but が含まれています。このテキストを選択したいです。

4

1 に答える 1

2

UITextviewUIControlEventEditingChangedをいくつかのメソッドに接続できると思います。したがって、ユーザーが何かを選択すると、そのメソッドが呼び出されます。メソッド内では、を使用して選択したテキストを取得できます。

NSRange range = [txtView selectedRange];
NSString *str = [txtView.text substringWithRange:range];

選択した文字列から、好きなアクションを実行できます。

テキストビューが編集可能である場合は、次のように取得できます。

NSLog(@"%d",range.location);

場所がわかれば、範囲を作成して文字列を選択できます。これこれには関連情報があります。

//これが完全なサンプルコードです。

  {
        sampleTextView = [[UITextView alloc] initWithFrame:CGRectMake(10, 10, 60, 300)];
        sampleTextView.text = @"This is sample text to find text under touch. I am not going to use any private api.How am i supposed to do?.Let me see.";
        sampleTextView.editable = YES;
        sampleTextView.delegate = (id)self;
        [self.view addSubview:sampleTextView];
    }
- (void)textViewDidBeginEditing:(UITextView *)textView
{

    [NSTimer scheduledTimerWithTimeInterval:0.001 target:sampleTextView   selector:@selector(resignFirstResponder) userInfo:nil repeats:NO];
}

- (void)textViewDidEndEditing:(UITextView *)textView
{
    NSRange selectedRange = [textView selectedRange];
    NSString *backString = [sampleTextView.text substringToIndex:selectedRange.location];
    NSRange backRange = [backString rangeOfString:@" " options:NSBackwardsSearch];
    NSString *forwardString  = [sampleTextView.text substringFromIndex:backRange.location];
    NSLog(@"%@",[[forwardString componentsSeparatedByString:@" "] objectAtIndex:1]);
}

編集 :

要件に基づいてコードを更新しました。以下で見つけてください、

UITextView *textview;
BOOL toggle;

- (void)viewDidLoad
{
    [super viewDidLoad];

    textview = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
    textview.delegate = (id)self;
    textview.inputView = [[UIView alloc] init];
    textview.text = @"Let's hope the text selection works programmatically!";
    [self.view addSubview:textview];
}

- (void)textViewDidChangeSelection:(UITextView *)textView
{    
    NSRange selectedRange = [textView selectedRange];
    NSString *backString = [textView.text substringToIndex:selectedRange.location];
    NSRange backRange = [backString rangeOfString:@" " options:NSBackwardsSearch];
    NSString *forwardString  = [textView.text substringFromIndex:backRange.location];

    NSLog(@"%@",[[forwardString componentsSeparatedByString:@" "] objectAtIndex:1]);

    NSRange ran = [textView.text rangeOfString:[[forwardString componentsSeparatedByString:@" "] objectAtIndex:1]];

    if (!toggle)
    {
        [self performSelector:@selector(selectText:) withObject:[NSValue valueWithRange:ran] afterDelay:0.001];
    }
    else
    {
        toggle = !toggle;
    }
}

-(void)selectText:(NSValue *)sender
{
    toggle = !toggle;

    textview.selectedRange = [sender rangeValue];
}
于 2012-04-24T08:13:18.633 に答える