如果单元格中有UITextView,则无法选择UITable Cell

时间:2011-08-04 19:19:30

标签: iphone objective-c ios

我在我的手机中添加了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]; 

非常感谢, -code

6 个答案:

答案 0 :(得分:14)

我认为解决方案实际上是

txtView.userInteractionEnabled = NO;

这会将触摸传递给父视图..或者在本例中为UITableViewCell。如果你在多个地方这样做,那么继承UITAbleViewCell

是个好主意

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

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView

然后选择正确的UITableViewCellself.tableview ..但这不过是黑客攻击。

答案 1 :(得分:0)

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

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

另一件事,你是如何创建你的细胞的?

答案 2 :(得分:0)

细胞使用一次或可能无限次使用?如果一次,那么你可以使用

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

并手动插入indexPath,因为你知道它在哪里。

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

答案 3 :(得分:0)

  1. 向单元格添加UITapGestureRecognizer。

  2. 写下如下手势处理代码。

    - (IBAction)handleTap:(UITapGestureRecognizer *)sender
    {
        [self.tableView selectRowAtIndexPath:
         [self.tableView indexPathForCell:(UITableViewCell *)sender.view]
                                    animated:NO
                              scrollPosition:UITableViewScrollPositionNone];
    }
    
  3. 连接它们。

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

答案 4 :(得分:-1)

是的,有意义的是没有选择该行,因为它上面有textView。以下是几种解决方法。

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

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

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

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

    Select tableview row programmatically


  3. 注意:您必须在逻辑上将每个textView与其对应的cellIndexPath相关联。

答案 5 :(得分:-2)

尝试

txtView.userInteractionEnabled = YES;

应该这样做。