2015-05-25 44 views
0

我有一個自定義的類藥物與變量的名稱和方向。我在一個顯示Medication.name和Medication.directions的tableview中顯示數組。Swift:表視圖中的自定義類數組 - 編輯值:附件segue或其他?

我希望用戶能夠點擊行或附件按鈕(Detail?)上的編輯所選行中的值。

我的理想情況是使用可更新字段的選定行的底部下拉菜單,該字段將更新數組中的行並重新加載tableview。

有沒有辦法做到這一點或類似的東西?我正在玩隱藏的視圖字段,讓他們顯示何時該行被選中,但我不確定是否可以將一個錨定到所選行的底部?或者我可以構建一個自定義單元格,在每個單元格中都有可編輯字段,這些字段是隱藏的,固定高度的單元格會在單擊它時發生變化以顯示額外的字段。

同樣,如果最好的選擇是使用附件視圖,Detail是最合適的嗎?我似乎無法右鍵單擊並拖動一個segue。或者我會在下面使用它?

optional func tableView(_ tableView: UITableView, 
accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath) 

如果我Segue公司這另一個視圖控制器,我需要使用委託顯然是這樣,我希望能找到一個簡單的解決方案的陣列從實現代碼如下改變。

謝謝!感謝任何提示這個新手

這裏就是我堅持的SEGUE:

 let vc = segue.destinationViewController as! MedDetailViewController 
     vc.delegate = self 
     let MedRow = self.tableView.indexPathForSelectedRow()! 
     let passMed = myMedsList[MedRow] //this row doesn't work 
     vc.detailMed = passMed 

回答

0

一個賽格瑞不僅要做到這一點最簡單的方法,你也可以採取自動回捲賽格瑞的優勢返回你編輯的值。

沒有代表團需要。沒有自定義代碼將隱藏的視圖添加到您的單元格。

如果您只有一個segue,請將其添加到行中,而不是附件。用戶傾向於期望在該行上敲擊會有所作爲。如果它沒有做任何事情,大多數用戶不會嘗試點擊附件。

敲擊附件意味着作爲輔助動作,它執行的操作與行上的敲擊不同。

我會在Storyboard中設置show segue。編寫代碼較少,維護代碼較少。讓Storyboard爲你做好工作。

更新:

這裏是蘋果公司的技術說明中有關Using Unwind Segues,對如何目的地(呈現)視圖控制器從源(提出)的視圖控制器訪問數據的斯威夫特例如,沿着。

@IBAction func unwindToMainMenu(sender: UIStoryboardSegue) 
{ 
    let sourceViewController = sender.sourceViewController as! MedDetailViewController 
    // Update the medsList array with the new detailMed 
    let medRow = self.tableView.indexPathForSelectedRow().row 
    medsList[medRow] = sourceViewController.detailMed 
} 

更新2:

你想讓你放鬆身心的SEGUE前使用prepareForSegue更新細節視圖控制器的detailMed屬性:方法。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "unwindToMedications" 
    { 
     // Update the detailMed if the user has edited it 
     self.detailMed = ... // the edited medication you're returning 
    } 
} 

更新3:

後退按鈕(或刷背面)簡單地關閉彈出堆棧中推視圖控制器,但沒有賽格瑞該被呼叫。你需要明確地勾上一個完成按鈕,將爲你放鬆和更新葯物列表

您明確展開的原因是爲了區分用戶是否想要提交或取消任何更改。 (他們是否做出了改變,但他們想忽略它,所以他們壓下了?)

你有兩個選項,這兩個選項都可以工作,它取決於你如何呈現可編輯的細節。 (我傾向於推送細節,編輯表單的模式,但無論哪種方式都有效)。

  1. 推動詳細視圖控制器。有一個完成按鈕。用戶可以使用「後退」按鈕取消或「完成」按鈕接受任何更改的醫療詳情。

  2. 提供帶取消和完成按鈕的模態視圖控制器。同樣,用戶可以取消(返回而不更改),或點擊完成(返回並)接受更改。

對於任何演示文稿,可以將展開的漸變連接到完成按鈕。這將做什麼是調用Meds列表視圖控制器展開操作。正如我們之前所討論的那樣,在這個展開代碼中,您可以獲得醫學細節並更新葯物列表。

關於核心數據的記載:

還有另一種方法是不容易學習比塞格斯,但它是一個非常適合。 (要注意的是,如果不是這個應用程序,那麼下一個。)

核心數據和NSFetchedResultsController。您保存已編輯的藥物,NSFetchedResultsControllerDelegate會更新您的藥物清單。有些人可能會說這太過分了,但是自從我開始使用NSFetchedResultsController之後,我希望自己早日學會了這一點。

+0

很酷,謝謝。我會嘗試 - 非常有用的提示。 segue將讓我顯示所選單元格的詳細信息,但如果我希望用戶能夠編輯它並將這些編輯傳回原始表格,我仍然需要一個委託正確的? – LearningSwift

+0

不一定。代表是傳遞信息的一種方式,但可以使用unwind segue代替代表。展開細節更簡單一些,並且比代理需要的代碼更少。目標視圖控制器訪問源(細節)視圖控制器的已編輯屬性。 –

+0

我已經用鏈接和示例更新了答案。 –