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
,
然后选择正确的 UITableViewCell
到 self.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