2016-03-21 50 views
0

我想向我的UITableView中的第一個單元格添加一個漸變。只編輯UITableView中的第一個單元格

這裏是if聲明我來確定是否細胞是在表中的第一個。

if (indexPath.row == 0 && indexPath.section == 0) { 

此代碼似乎並沒有因爲有少數細胞與梯度,尤其是與有時第二單元沿第一和最後一個單元格是工作。這很奇怪,因爲我使用indexPath.row獲取的信息正在從正確的位置獲取信息。

爲什麼我的if語句不工作?即使我正在從陣列中的正確位置獲取信息。

+0

我猜你需要刪除梯度,如果它不是第一個單元格,因爲可能出現的問題是如果一個單元格出隊最初是第一個單元格,它將有梯度 –

+0

@Josh Hamet,這不應該導致一個問題,因爲在我的表格中的單元格保持在相同的位置。我沒有讓他們換地方。 – brettf

+0

由於單元格出於性能原因而重用的事實,您必須處理其他單元格的情況(例如,設置所需的背景顏色而不是梯度) – Alladinian

回答

1

你可能不執行你的自定義的UITableViewCell子類prepareForReuse。它看起來像是正確定位第一個單元格,所以也許當該單元格稍後重新用於其他索引路徑時,您並未清除之前添加的漸變。

+0

如何覆蓋'prepareForReuse'使其使單元在重新添加額外圖層之前將其自身重置爲某一點? – brettf

+0

@brettf很難肯定地看到你的代碼,但我的第一個想法是你的自定義單元格應該有一個引用它插入的漸變層的ivar。在'prepareForReuse'方法中,它會做一些像'self.gradientLayer.removeFromSuperlayer()'。爲此,您的UITableViewDataSource應該只調用自定義單元格上的方法,比如'showGradient()',而不是從自定義單元格類外部插入圖層。如果自定義單元類自己管理插入漸變圖層,它也可以保留對其的引用並在重用時將其刪除。 –

1

確保您有一個else條件與您if走。因爲表格視圖單元格被重用,所以如果它位於第一個單元格以外的單元格中,則需要確保刪除該漸變。

if(first cell) 
    add gradient 
else 
    remove gradient if it exists 
+0

我將如何去除梯度子層? – brettf

+0

@brettf不知道你是如何設置它的,我不知道。 – Stonz2

0
  1. 如果您使用定製單元,設置自定義單元格梯度變量來清除所有,但第一個單元格顏色。

  2. 如果您使用的是標準uitableview單元格,請將默認漸變添加到每個單元格,然後如果它是第一個單元格,則將漸變顏色更改爲任何需要的顏色,並將默認顏色清除。這樣分配之後

  3. 備選地清潔從小區中的所有子視圖:

    爲(UIView的*在cell.subviews子){ [子removeFromSuperview]; }

然後爲第一個單元格添加您的漸變。

選項1是最乾淨的。

相關問題