2013-10-18 26 views
6

我正在製作UICollectionView其中一些UICollectionViewCells包含UITableViewUITableView裏面的UICollectionViewCell,所有UITableViewCells突出顯示時,單擊單元格

這很好,一切都很好,直到我點擊了UICollectionViewCellUITableView以外的地方。這會導致在表中的所有UITableViewCells上調用setHighlighted方法。

下面是UICollectionViewCell的一個粗糙的scetch。 UITableView僅從 「單元格」到「單元格3」。點擊此表以外的任何位置,但在UICollectionViewCell內部會導致單元格高亮顯示。

------------------------- 
| Title goes here  | 
|      | 
------------------------- 
|      | 
| Cell one   | 
------------------------- 
|      | 
| Cell two   | 
------------------------- 
|      | 
| Cell three   | 
------------------------- 
| Button outside table | 
|-----------------------| 

調用堆棧看起來像這樣。

[MyTableViewCell setHighlighted:] 
[UICellHighlightingSupport highlightView:] 
UIApplicationMain 
main 

好像UICollectionViewCell轉發高亮命令到所有單元格。

我通過在我的UITableViewCell子類中重載setHighlighted方法而未調用超級實現來解決此問題。雖然這看起來有點不順利,我想知道這種行爲是否可以以某種方式避免。

編輯: 我認爲這種行爲是來自當UICollectionCellView電話setHighlighted其所有的孩子。我瞭解的其他大多數情況下都是有用的。

+0

嘗試子類化您的UITableView併爲其添加空setHighlighted:方法。 –

+0

「我通過重載UITableViewCell子類中的setHighlighted方法而不是調用超級實現來解決這個問題,雖然這看起來有些冒失,但我不知道這種行爲是否可以避免。」 – Nailer

+0

你檢查我的答案了嗎?只是告訴集合視圖不突出顯示tableview有什麼問題? – micantox

回答

2

您是否嘗試過實施以下UICollectionViewDelegate的方法?

collectionView:shouldHighlightItemAtIndexPath: 

如果您在集合視圖中爲您的UITableView視圖返回NO,那麼您應該很好。

+0

工程就像一個魅力。沒想到這個。乾杯! – Nailer

+3

請注意,在iOS 7.1中,從'collectionView:shouldHighlightItemAtIndexPath:'返回NO實際上會阻止選中單元格。我提出了一個雷達。打開雷達鏡像:http://www.openradar.me/radar?id=5803034198147072 –

1

爲了解決這個問題,並允許直接點擊時突出顯示錶格視圖單元格,並避免覆蓋collectionView:shouldHighlightItemAtIndexPath:因爲它阻止了選擇的發生,所以我重寫了UICollectionViewCell的setHighlighted方法並顛倒了它所做的突出顯示我的表格視圖單元格。這樣,當選擇集合視圖時,我的表格視圖單元格不會突出顯示。

- (void) setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 

    if (highlighted) 
    { 
     dispatch_async(dispatch_get_main_queue(),^
     { 
      for (UITableViewCell* cell in self.tableView.visibleCells) 
       cell.highlighted = NO; 
     }); 
    } 
} 

我調度突出顯示,因爲看起來UICollectionViewCell也會延遲突出顯示。我需要在UICollectionViewCell之後發生突出顯示。

相關問題