2016-01-21 123 views
0

我有一個自定義單元格的UITableView。通常,當用戶點擊該單元格,它會觸發該功能:點擊單元格附件

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    //Segue to another view 
} 

如果這種觀點,他們標記爲完成,當他們返回的代碼將添加標準檢查附件的單元格。

當單元格沒有完成時,我想要一個空的檢查點,可以點擊(我知道我可以添加一個自定義圖像附件),點擊允許用戶跳過segue並快速標記單元格完成後。但我似乎無法使雙方的工作:

  1. 輕敲細胞的主體應該調用didSelectRowAtIndexPath方法
  2. 輕敲附件視圖(空複選標記)應該調用一組不同的代碼。

我試過accessoryButtonTappedForRowWithIndexPath,但它似乎甚至沒有被調用。

func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) { 
    //Shortcut code to change the cell to "finished" 
} 

是否有可能點擊主體觸發一組代碼並點擊附件視圖觸發另一個?如果是這樣,怎麼樣?

回答

1

您應該爲您的自定義UITableViewCell添加一個UIButton。然後,您可以添加一個目標,這個按鈕叫pressedFinished,說像cell.button.addTarget(self, action: "finishedPress:", forControlEvents: .TouchUpInside) 或pressedFinished的東西,那麼你可以這樣說:

func pressedFinished(sender:UIButton) 
{ 
    let location = self.tableView.convertPoint(sender.bounds.origin, fromView: sender) 
    let indexPath = self.tableView.indexPathForRowAtPoint(location) 
    //update your model to reflect task at indexPath is finished and reloadData 
} 

這通常不是一個偉大的實踐,因爲他們沒有內在的使用標籤含義。此外,映射到indexPath.row的標籤只有在表格有一個部分時纔會起作用。

另一種選擇可能會使用UITableViewRowAction:

override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath:  NSIndexPath) -> [AnyObject]? { 
    let rowAction : UITableViewRowAction 
    if model[indexPath].finished 
    { 
     rowAction = UITableViewRowAction(style: .Normal, title: "Mark as Unfinished", handler: {(rowAction:UITableViewRowAction,indexPath:NSIndexPath)->() in 
     //mark as unfinished in model and reload cell 
     }) 
}else{ 
     rowAction = UITableViewRowAction(style: .Normal, title: "Mark as Finished", handler: {(rowAction:UITableViewRowAction,indexPath:NSIndexPath)->() in 
     //mark as finished in model and reload cell 
     }) 
    } 
    return [rowAction] 
} 
+0

但這裏的有關手動添加一個按鈕,像一個附件的東西......綱領性添加附件的是偉大的!它的尺寸沒有拉伸和垂直居中。添加附件甚至可以調整細胞的主體。對我來說最重要的是,在某些情況下,表應該沒有配件所以很高興有它是一個簡單的開關加載。沒有辦法添加配件圖像視圖並使其可點擊? –

+0

您可以設置按鈕,是小區的accessoryView的,但你需要像我上述設定目標的方式相同。 AccessoryView是UITableViewCell上的一個讀寫UIView屬性。你應該知道,如果設置accessoryView的設置accessoryType被忽略,因此,如果你想使用UITableViewCellAccessoryCheckmark在按鈕的動作,你不得不重新裝入電池,並設置accessoryView的爲零和accessoryType到UITableViewCellAccessoryCheckmark和就沒有辦法因爲UITableViewCellAccessoryCheckmark不響應水龍頭,所以用戶可以將該操作逆轉 – beyowulf

0

其Objective-C解決方案。 如果您添加了自己的accessoryButton,那麼將不會調用'accessoryButtonTappedForRowWithIndexPath'的tableviewDelegate方法。 你應該做的是,爲該方法創建一個UIButtonaddTarget,然後將其作爲accessoryButton添加到tableViewCell。還要將tag的值設置爲index path.row,以便您瞭解哪個行被點擊。

0

我選擇,我想給一個完整的答案回答,以及我幫助了。但是,我從回答有點偏離,並希望分享這還有:

使附屬視圖出現/消失

我幾個列表加載到同一個故事板表。有時列表應顯示指標,其他時間則不需要配件。爲此,我在故事板中添加了一個按鈕,垂直居中,尾部= 0到正確的容器視圖。然後我給它的寬度爲0,並在我的代碼中給這個約束一個IBOutlet。當我需要配件時,我只是簡單地給它一個寬度。爲了使它消失,我將其寬度設置回0。

配件和核心數據

配件是一種痛苦,因爲如果用戶檢查過的東西然後關閉該應用程序,他們希望它被人記住。因此,對於每個更改,都需要將該單元狀態保存在CoreData中。我添加了一個名爲「狀態」的屬性,並在配件顯示填滿時給它一個「已選擇」的值。

這也意味着,我必須按該屬性檢索列表時進行排序。如果你已經有了一個排序描述符,你現在需要幾個。