UITable Cell 在单元格中有 UITextView 时无法选择

Posted

技术标签:

【中文标题】UITable Cell 在单元格中有 UITextView 时无法选择【英文标题】:UITable Cell not selectable where there is a UITextView in the cell 【发布时间】:2011-08-04 19:19:29 【问题描述】:

我已将UITextView 添加到我的单元格中。如果用户单击UITextView 所在的单元格,则不会调用didSelectRowAtIndexPath:,除非他们单击UITextView 未覆盖的区域。是否有解决方法或我做错了什么?

UITextView *txtview = [[UITextView alloc] initWithFrame:CGRectMake(75, 1, 250, 34)];//init and create the UIWebView
txtview.autoresizesSubviews = NO;
//txtview.autoresizingMask=(UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
[txtview setBackgroundColor:[UIColor grayColor]];
[txtview setFont:[UIFont fontWithName:@"Helvetica" size:15]];
txtview.textColor = [UIColor blackColor];
txtview.scrollEnabled = NO;

[txtview setOpaque:NO];
//[txtview setDelegate:self];
txtview.editable = NO;
txtview.text = aBlogRss.title;
[txtview setContentInset:UIEdgeInsetsMake(-11,-8,0,0)];
//[txtview loadhtmlString:htmlString baseURL:nil];
[cell addSubview:txtview];
[txtview release]; 

非常感谢, -代码

【问题讨论】:

【参考方案1】:

我认为解决方案其实是

txtView.userInteractionEnabled = NO;

这会将触摸传递给父视图.. 或者在本例中为UITableViewCell。如果您在多个地方执行此操作,最好将UITAbleViewCell 子类化。

或者,您可以将您的类设为 UITextViewDelegate,将您的 txtView.delegate 设置为 self,然后实现

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView,

然后选择正确的 UITableViewCellself.tableview.. 但这无异于 hack。

【讨论】:

【参考方案2】:

您应该在viewDidLoad: 中创建您的UITextView,并且只在您的cellForRowAtIndexPath: 中保留[cell addSubview:txtview];

或者,您可以使用:[cell setAccessoryView: txtView];

另外,你是如何创建你的细胞的?

【讨论】:

【参考方案3】:

单元格是使用一次还是可能无限次使用?如果一次,那么你可以使用

- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition

并手动插入 indexPath,因为您知道它的位置。

如果要重复使用单元格,请尝试将文本字段的“标记”属性设置为行,然后当 UITextView 检测到触摸时,使用其委托方法之一调用上述 UITableView 方法,提供从 UITextView 的标签派生的 NSIndexPath。

【讨论】:

【参考方案4】:

    将 UITapGestureRecognizer 添加到单元格。

    编写如下所示的手势处理代码。

    - (IBAction)handleTap:(UITapGestureRecognizer *)sender
    
        [self.tableView selectRowAtIndexPath:
         [self.tableView indexPathForCell:(UITableViewCell *)sender.view]
                                    animated:NO
                              scrollPosition:UITableViewScrollPositionNone];
    
    

    连接它们。

您将获得可选择的 UITextView 和可选择的 UITextViewCell。

【讨论】:

【参考方案5】:

是的,该行没有被选中是有道理的,因为它上面有一个textView。以下是解决此问题的几种方法。

    您可以制作textView 框架,以便为选择行提供空间。

    您可以将每个 textView(对于每一行)设置为一个属性,并找出选择了哪个 textView。基于此,您可以调用 textViewDidBeginEditing 方法并以编程方式使该行可选。

    [self.tableView selectRowAtIndexPath:indexPath animated:YES  scrollPosition:UITableViewScrollPositionNone];
    

    参考:How do I select a UITableViewCell by default?

    Select tableview row programmatically


注意:您必须将每个textView 与其对应的cellIndexPath 逻辑链接。

【讨论】:

【参考方案6】:

试试

txtView.userInteractionEnabled = YES;

应该可以的。

【讨论】:

以上是关于UITable Cell 在单元格中有 UITextView 时无法选择的主要内容,如果未能解决你的问题,请参考以下文章

UItableView Cell上的UIbutton不可点击

在 UITable+iphone 中选择特定行时将拇指图像传递给其他 uiview

iOS swift UIImageView更改tableView单元格中的图像

如何在代码中使用 UItable 单元中的按钮插座

仅在某些单元格中添加SubView

仅某些单元格中的addSubView