2015-11-19 54 views
1

這是我的問題:我正在使用Swift中的iOS應用程序。我有一個代表會議的桌子視圖。我創建了一個自定義單元格。這個單元格包含一個圖像。故事板中設置了默認的一個。Swift:在CellForRowAtIndexPath中設置新的UIImage不顯示

現在取決於當前行數據,如果會議過期或新建,我想要可視化。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("meetingListCell", forIndexPath: indexPath) as! MeetingListCell 
    let meeting = meetingList![indexPath.row] 

    cell.meeting.text = meeting.text 

    if(meeting.isExpired()) { 
     cell.meetingIconImageView.image = UIImage(named: "meeting-expired") 
    } else { 
     cell.meetingIconImageView.image = UIImage(named: "meeting-new") 
    } 
    cell.setNeedsLayout() 
    cell.setNeedsDisplay() 
    return cell 
} 

但它只是不改變圖像。也許這是一個愚蠢的一個,但實際上它驅使我堅果;-)

很多感謝 乾杯 約翰

+0

1.是'isExpired()'返回預期結果的會議/細胞? 2.您的項目資產目錄中是否有名爲「會議過期」和「會議新」的圖像? – JAL

+0

它可以與其他圖像一起使用嗎?實際上是否有指定名稱的圖像? –

+0

您是否在該方法中設置了斷點並確定是否實際設置了「cell.meetingIconImageView.image」? – Caleb

回答

1

沒有什麼具體的你的代碼錯誤,據我可以看到,但這裏有一些事情嘗試

設置一個斷點並確保UIImage構造函數返回一個圖像,而不是零。

,如果它是零:

  • 檢查圖像添加到項目正常,並且它的命名如您所願。

  • 檢查圖像的目標是否設置爲項目目標。有時候圖像會被錯誤地添加,並且不是真正運行應用程序時構建的內容的一部分。將它們添加到Images.xcassets而不僅僅是鬆散地在項目中可能會以簡單的方式解決此問題。

,如果它不是零:

  • 檢查您的ImageView有一個適當的框架集。您可以在應用程序運行時在Debug View Hierarchy函數中查看它。嘗試將約束設置爲固定大小作爲測試可能會幫助您找到與此相關的任何問題。

在另一方面,你真的不應該需要做

cell.setNeedsLayout() 
cell.setNeedsDisplay() 
+0

您好Moriya,感謝您的想法和您的反饋,在一般的代碼確實可行。過了一晚後,我再次檢查了所有內容,然後從media.xcassets中刪除了圖像並重新上傳,最後(爲什麼)解決了這個問題。真的不知道爲什麼,但是你和@ArturOlszak的回覆都很有幫助。感謝您的確認,不需要'cell.setNeedsLayout()'和'cell.setNeedsDisplay()',我不確定。 –

1

我會用這些步驟對其進行調試:當你將他們

  1. 檢查是您的圖片不爲空meetingIconImageView 。

  2. 檢查圖像在UITableViewCell(cell.imageView.image = UIImage ...)中的內置UIImageView中可見。

  3. 檢查meetingIconImageView實際上在視圖中可見 - 設置紅色背景。也許約束被搞砸了。

  4. 檢查你是否在你的自定義單元格中做了錯誤的事情 - 可能是出口連接錯誤,或者你在init方法中做了一些瘋狂的事情。

如果還是錯的,然後拿一個啤酒,並檢查它明天早上;-)

+0

嗨ArturOlszak,感謝您的想法。特別是最後一個工作(啤酒和早晨的東西;-)我今天早上加倍檢查了一切,最後,我刪除了media.xcassets的圖標,並重新加載它,它工作。不知道爲什麼不之前,但這解決了這個問題。 –