2015-07-20 190 views
0

我正在xCode 7 Beta/Swift中工作。我在故事板中的UIViewController中創建了UITableView。我有一個控制器,實現UITableViewDelegateUITableViewDataSource協議。UITableView與可編輯單元格圖形

在故事板中,只有一個原型單元格。它只有一個子視圖,UIScrollView。在控制器中,我需要將圖像添加到此滾動視圖。根據單元格的不同,需要添加可變數量的圖像。我還需要在滾動視圖之外的單元格中添加一個按鈕。按下此按鈕後,我需要添加或刪除滾動視圖中的圖像,並將按鈕更改爲不同的按鈕。

目前,我在func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell中實現了所有這些功能。按下一個按鈕後,我將按下按鈕的行稱爲self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.None)func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell內部有一個巨大的if-else,它檢查是否因爲剛剛按下了一個按鈕而被調用,或者是否因爲需要生成一個新單元而被調用。

這不起作用。一個單元似乎沒有記住它以前添加的子視圖。

兩個問題:

  1. 什麼是編輯的tableview細胞在 單擊該單元格按鈕的UI的最佳方式?
  2. 我應該如何佈局我的tableView 中的原件(在按下任何按鈕之前)的單元格,並且只能在控制器中訪問信息?

回答

1

如果您重複使用UITableView中的單元格,屏幕上將不會保存到單元格中的任何更改。它們將被擦除,並且一旦您再次滾動它,單元格將被重新加載爲「默認」。如果你想知道我的意思,當我說「重用」,我指的是使用以下的選擇中獲得細胞:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"myCell" forIndexPath:indexPath]; 
    // Configure Cell 
    return cell; 
} 

的選擇dequeueReusableCellWithIdentifier意味着它會重複使用或回收細胞保存記憶。

在UITableViewCell中有大量的圖像和按鈕是一個問題。爲了解決你的問題,我不建議禁用dequeue方法,而是建立一個數組或對象類型來保存單元信息。

這將允許您在單元格不存在的情況下存儲信息,然後使用tableView行索引獲取它,並將其顯示在單元格中。

+0

當你說'默認'時,你究竟是什麼意思?什麼是默認?代碼默認的單元格在哪裏?我問,因爲如果我向下滾動並向上滾動(從而重新加載它們),tableview第一次加載時第一個屏幕上的單元格與那些相同單元格不同。 – user2585945

+0

默認單元格是您修改單元格之前的任何內容。如果我使用一個標準的UITableViewCell而不是子類化,它將是一個空白的白色單元格,高度約爲30px。默認的單元格有我相信的UIImageView和UILabel。你如何創建你的細胞?你是否繼承它們? – Micrified

0

感謝您的幫助。我是能夠通過從該按鈕的目標功能內更新小區UI來解決這個問題:

let buttonPosition = sender.convertPoint(CGPointZero, toView: self.tableView) 
if let indexPath = self.tableView.indexPathForRowAtPoint(buttonPosition) { 

    self.eventsUserJoined[indexPath.row] = false 
    let cell = tableView.cellForRowAtIndexPath(indexPath) as! NewsFeedCell 
} 

我然後使用此參考小區來更新它的子視圖。我還存儲了一個全局指示符(self.eventsUserJoined)變量,以確保單元在必須重繪時正確播放。