2011-08-04 23 views
5

Tôi đã thêm UITextView vào ô của mình. Nếu userclicks trên ô nơi UITextView thì didSelectRowAtIndexPath: không được gọi trừ khi họ nhấp vào khu vực nơi UITextView không bao gồm. Có một công việc xung quanh hay những gì tôi đã làm sai?UITable Cell không thể chọn khi có UITextView trong ô

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

Nhiều Cảm ơn, -Code

Trả lời

14

Tôi nghĩ rằng giải pháp thực sự là

txtView.userInteractionEnabled = NO; 

này sẽ vượt qua chạm đến cái nhìn mẹ .. hoặc trong trường hợp này UITableViewCell. Nếu bạn đang làm điều này ở nhiều nơi, bạn nên chọn lớp con UITAbleViewCell.

Ngoài ra, bạn có thể làm cho lớp học của bạn một UITextViewDelegate, thiết txtView.delegate của bạn để tự và thực hiện

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

và sau đó chọn đúng đắn UITableViewCell qua self.tableview .. Nhưng điều đó sẽ không có gì ngắn của một hack.

0

Bạn nên tạo của bạn UITextView trong viewDidLoad: và chỉ giữ [cell addSubview:txtview]; trong cellForRowAtIndexPath: của bạn.

Hoặc, bạn có thể sử dụng: [cell setAccessoryView: txtView];

Một điều nữa, bạn tạo ô như thế nào?

-2

thử

txtView.userInteractionEnabled = YES; 

Điều đó sẽ làm điều đó.

0

Điện thoại có được sử dụng một lần hoặc có khả năng không giới hạn số lần không? Nếu một lần, sau đó bạn có thể sử dụng

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

và chèn thủ công indexPath vì bạn biết nó nằm ở đâu.

Nếu ô được sử dụng lại, hãy thử đặt thuộc tính "thẻ" của trường văn bản có hàng, sau đó khi chạm được phát hiện bởi UITextView, sử dụng một trong các phương thức ủy nhiệm của nó để gọi phương thức UITableView ở trên , cung cấp một NSIndexPath có nguồn gốc từ thẻ của UITextView.

-1

Vâng, có nghĩa là hàng không được chọn vì có textView trên đó. Dưới đây là một số cách để thực hiện điều này.

  1. Bạn có thể tạo khung textView sao cho bạn cung cấp chỗ để chọn hàng.

  2. Bạn có thể đặt mỗi textView (cho mỗi hàng) làm thuộc tính và tìm ra textView nào đã được chọn. Dựa trên đó bạn có thể gọi phương thức textViewDidBeginEditing và lập trình làm cho hàng đó có thể chọn được.

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

    Tài liệu tham khảo: How do I select a UITableViewCell by default?

    Select tableview row programmatically


Lưu ý: Bạn sẽ phải logic liên kết mỗi textView với nó tương ứng cellIndexPath.

+0

Tại sao chọn Downvote? :( – Legolas

0
  1. Thêm UITapGestureRecognizer vào ô.

  2. Viết mã xử lý cử chỉ như dưới đây.

    - (IBAction)handleTap:(UITapGestureRecognizer *)sender 
    { 
        [self.tableView selectRowAtIndexPath: 
        [self.tableView indexPathForCell:(UITableViewCell *)sender.view] 
               animated:NO 
              scrollPosition:UITableViewScrollPositionNone]; 
    } 
    
  3. Kết nối chúng.

Bạn sẽ nhận được cả UITextView có thể chọn và UITextViewCell có thể chọn.

Các vấn đề liên quan