2012-05-03 11 views
1

UITableViewCellの中にTTStyledTextLabelがあります。セルをクリックすると新しいビューコントローラに移動するので、選択を無効にすることはできませんが、TTStyledTextLabelをクリックするとUITableViewCellも選択されます。テーブルビューのセルを選択せず​​にTTStyledTextLabelをクリックすると、どんな考えですか?TTStyledTextLabelをクリックすると、UITableViewCellが選択されます

答えて

1

だけサブクラスTTStyledTextLabelと、次の2つのメソッドをオーバーライドします。

  • (無効)touchesBegan:(NSSet *)はwithEvent触れる:(たUIEvent *)イベント
  • (ボイド)touchesEnded:(NSSet * (たUIEvent *)イベントちょうどこのよう

::)はwithEventに触れる

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 
    UITouch* touch = [touches anyObject]; 
    CGPoint point = [touch locationInView:self]; 
    point.x -= _contentInset.left; 
    point.y -= _contentInset.top; 

    TTStyledBoxFrame* frame = [_text hitTest:point]; 
    if (frame) { 
     [self setHighlightedFrame:frame]; 
    } 
} 

- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { 
    TTTableView* tableView = (TTTableView*)[self ancestorOrSelfWithClass:[TTTableView class]]; 
    if (!tableView) { 
     if (_highlightedNode) { 
      // This is a dirty hack to decouple the UI from Style. TTOpenURL was originally within 
      // the node implementation. One potential fix would be to provide some protocol for these 
      // nodes to converse with. 
      if ([_highlightedNode isKindOfClass:[TTStyledLinkNode class]]) { 
       TTOpenURL([(TTStyledLinkNode*)_highlightedNode URL]); 

      } else if ([_highlightedNode isKindOfClass:[TTStyledButtonNode class]]) { 
       TTOpenURL([(TTStyledButtonNode*)_highlightedNode URL]); 

      } else { 
       [_highlightedNode performDefaultAction]; 
      } 
      [self setHighlightedFrame:nil]; 
     } 
    } 
} 
+0

おかげさまで、いくつかの変更を加えれば、リンク上のタッチだけをブロックすることができました。 –

関連する問題