6

我的UITableViewCell选择有问题。我正在使用 UITableViewCell带有UITextView子视图的 a。在启用用户交互的情况下,该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

这些建议在 iOS 6 中对我不起作用。以下是起作用的。

在你的:

- (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]];
}

在设置可编辑 = NO 后,似乎有必要设置 userInteractionEnabled = YES。在 XIB 中设置这些似乎不起作用。

于 2013-06-03T22:47:18.950 回答
3

因为 UITextView 确实捕获了触摸事件,所以您可以通过两种方式解决此问题:

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

如果只需要禁用一个子视图,可以在 Swift 中执行以下操作。

theSubTextView.isUserInteractionEnabled = false

这也会禁用 isEditable 和 isSelectable。

于 2017-03-02T05:01:13.287 回答
0

在我的情况下,我tableViewCell根据textView.text长度调整大小,所以我UIView在顶部添加了一个textView并将其颜色设置为0.1%white.

于 2017-02-09T15:47:00.103 回答