6

UITableViewCell選択に 問題があります。サブビューUITableViewCell付きのを使用していUITextViewます。オブジェクトは、UITextViewユーザーインタラクションが有効になっているため、編集もスクロールもできません。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {      
        cell=[[[NSBundle mainBundle]loadNibNamed:@"DemoCell" owner:self options:nil]objectAtIndex:0];         
        cell. accessoryType=UITableViewCellAccessoryDisclosureIndicator;
    }
      if([distanceArray count]){ 
        UILabel *label1=(UILabel*)[cell viewWithTag:1];      
        label1.text=[locationNameArray objectAtIndex:[indexPath section]];
        label1.textColor=[UIColor blueColor];
        UILabel *label2=(UILabel*)[cell viewWithTag:2];        
        [label2 setText:[distanceArray objectAtIndex:[indexPath section]]];
        UITextView *tview=(UITextView*)[cell viewWithTag:3];   
        [tview setText:[discriptionArray objectAtIndex:[indexPath section]]];         
        return cell;
      }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    DetailedLocationVIew *dView=[[DetailedLocationVIew alloc]initWithNibName:@"DetailedLocationVIew" bundle:nil];       
    [self.navigationController pushViewController:dView animated:YES];
    [dView release];
}

上のセルを選択するUITextViewと、代理人didSelectRowIndexPathは呼び出しません。オーバーUITextView オブジェクトと選択は別としてうまく機能しますか?UITextViewで選択が機能しないのはなぜですか?

4

5 に答える 5

15

使用tview.userInteractionEnabled=NO;して、それはあなたの問題を解決します。

これで問題が解決しない場合は、これを試してください

for(UIView * cellSubviews in cell.subviews)
{
    cellSubviews.userInteractionEnabled = NO;
}

セル内のすべてのサブビューをループし、userInteractionEnabledプロパティをに設定しますNO

于 2012-05-17T12:26:31.340 に答える
8

これらの提案はiOS6では機能しませんでした。機能したのは次のとおりです。

あなたの中で:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

これを追加:

cell.textView.dataDetectorTypes = UIDataDetectorTypeAll;
cell.textView.editable = NO;
cell.textView.userInteractionEnabled = YES;

UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(forwardToDidSelect:)];
cell.tag = indexPath.row;
[cell.textView addGestureRecognizer: tap];

一緒に:

- (void) forwardToDidSelect: (UITapGestureRecognizer *) tap
{
    [self tableView: self.tableView didSelectRowAtIndexPath: [NSIndexPath indexPathForRow: tap.view.tag inSection: kTextViewCellSection]];
}

editable = NOに設定した後、userInteractionEnabled=YESに設定する必要があるようです。XIBでこれらを設定することはうまくいかなかったようです。

于 2013-06-03T22:47:18.950 に答える
3

UITextViewはタッチイベントをキャッチしたため、これを2つの方法で解決できます。

1)UITextViewをサブクラス化し、タッチイベントをキャッチしてから、次を使用してsuperViewの同じメソッドに渡します。例:

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.superview touchesEnded:touches withEvent:event];
}

2)UITextViewデリゲートの使用:

- (void)textViewDidBeginEditing:(UITextView *)textView
{
NSIndexPath *a = [NSIndexPath indexPathForRow:0 inSection:[textView tag]];
[tableview didSelectRowAtIndexPath:
}
于 2012-05-17T10:45:07.923 に答える
2

1つのサブビューのみを無効にする必要がある場合は、Swiftで次の操作を実行できます。

theSubTextView.isUserInteractionEnabled = false

これにより、isEditableとisSelectableも無効になります。

于 2017-03-02T05:01:13.287 に答える
0

私の場合tableViewCell、長さに応じてサイズを変更しているので、上textView.textにを追加し、その色をに設定しました。UIViewtextView0.1%white

于 2017-02-09T15:47:00.103 に答える