我的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上工作?
答案 0 :(得分:11)
使用tview.userInteractionEnabled=NO;
,它将解决您的问题。
如果这不能解决你的问题,那就试试吧
for(UIView * cellSubviews in cell.subviews)
{
cellSubviews.userInteractionEnabled = NO;
}
循环遍历单元格内的所有子视图,并将userInteractionEnabled
属性设置为NO
。
答案 1 :(得分:7)
这些建议在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]];
}
设置editable = NO后,似乎需要设置userInteractionEnabled = YES。在XIB中设置这些似乎不起作用。
答案 2 :(得分:2)
因为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:
}
答案 3 :(得分:0)
在我的情况下,我根据tableViewCell
长度调整textView.text
的大小,因此我在UIView
之上添加了textView
并将其颜色设置为0.1%white
。
答案 4 :(得分:0)
如果只需要禁用一个子视图,可以在Swift中执行以下操作。
theSubTextView.isUserInteractionEnabled = false
这也会禁用isEditable和isSelectable。