2017-10-13 92 views
0

我有一個Swift3中的應用程序,它由2個不同的顯示類資產細節的UITableView組成。兩個表中的數據內容相同/相似(有一些過濾器),表示方式不同。因此,這個UIViewTables中的一個顯示了每個資產的註釋,另一個更關注於狀態。Swift3和Segue:兩個不同的UITableViewController指向一個UIView

如果用戶單擊一個表格單元格,兩個UITableViews都會打開相同的UIView以獲取完整的詳細信息,因爲兩個表格在最後表示相同的數據。

我嵌入了一個UINavigationControl併爲每個TableCell創建了一個segue。如果我點擊單元格,將打開正確的詳細信息屏幕。

但是,如果我將它保存下來,即使我從第二個表開始,它總能讓我回到第一個表。

有人可以給我一個提示嗎?

這是我在點擊保存按鈕時調用的DetailViewController準備方法。

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    super.prepare(for: segue, sender: sender) 

    print(segue.identifier) 

    // Configure the destination view controller only when the save button is pressed. 
    guard let button = sender as? UIBarButtonItem, button === btnSave else 
    { 
     //os_log("The save button was not pressed, cancelling", log: OSLog.default, type: .debug) 
     return 
    } 

    asset?.name = tfDeviceName.text ?? "" 
    //here comes some other stored asset information... 
} 

這是我第一次的UITableViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    super.prepare(for: segue, sender: sender) 

    switch(segue.identifier ?? "") 
    { 

    case "AddItem": 
     os_log("Adding a new asset.", log: OSLog.default, type: .debug) 

    case "ShowDetails": 
     guard let assetDetailViewController = segue.destination as? DetailViewController else { 
      fatalError("Unexpected destination: \(segue.destination)") 
     } 

     guard let selectedAssetCell = sender as? AssetTableViewCell else { 
      fatalError("Unexpected sender: \(String(describing: sender))") 
     } 

     guard let indexPath = tableView.indexPath(for: selectedAssetCell) else { 
      fatalError("The selected cell is not being displayed by the table") 
     } 

     selectedIndex = indexPath.row 

     let selectedAsset = assets[indexPath.row] 
     assetDetailViewController.asset = selectedAsset 

    default: 
     fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))") 
    } 
    editMode = true 
} 

這是我第二次的UITableViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

    super.prepare(for: segue, sender: sender) 

    switch(segue.identifier ?? "") { 

    case "AddItem": 
     os_log("Adding a new asset.", log: OSLog.default, type: .debug) 

    case "ShowTask": 
     guard let taskDetailViewController = segue.destination as? DetailViewController else { 
      fatalError("Unexpected destination: \(segue.destination)") 
     } 

     guard let selectedAssetCell = sender as? TaskTableViewCell else { 
      fatalError("Unexpected sender: \(String(describing: sender))") 
     } 

     guard let indexPath = tableView.indexPath(for: selectedAssetCell) else { 
      fatalError("The selected cell is not being displayed by the table") 
     } 

     let selectedAsset = assets[indexPath.row] 
     taskDetailViewController.asset = selectedAsset 

    default: 
     fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))") 
    } 
} 

在這裏,我的故事板 enter image description here

謝謝! BR 斯特凡

與Solution編輯:

THX到鄧肯的提示,我發現我的問題。展開操作通過crtl單擊並將其拖至退出事件,然後選擇展開方法,以附加到界面構建器中的保存按鈕。重要的是:您只能選擇一種方法,而不能選擇課程。該類由管理導航的系統自動選擇,但兩種方法(顯然)都必須具有相同的展開名稱。我犯了一個錯誤,使第二個UITableView中的展開方法稍有不同,然後系統在正確的UITableView中找不到該方法,並且跳到具有正確方法的UITableView,即使這個類不是原始的segue

回答

0

如何從DetailViewController返回到調用表視圖控制器?

這聽起來像你正在使用正常的賽格,這是錯誤的。

您可以使用開卷SEGUE,或任何你使用到那裏(如果你使用推SEGUE,叫pop(),如果你使用一個模式目前,呼叫dismiss()。)

+0

我使用反向這些來自蘋果的官方教程,區別在於我有2個表格,而不僅僅是一個(https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/ImplementNavigation.html#//apple_ref/doc/ UID/TP40015214-CH16-SW1)。 如我的剪切圖所示,我的保存按鈕在我的DetailViewController中調用prepare,將更改存儲在我的資源中,然後跳回(到錯誤的表)。在UITableViews中有展開方法可以對展開作出反應。有沒有辦法設置正確的賽格?正如在教程中我從不稱呼解僱,只有當「取消」 – user3354754

+0

「如我的剪切(原文如此),我的安全按鈕調用準備......」您沒有發佈您的DetailViewController的保存按鈕操作的任何代碼。這是我們需要看到的代碼。你說:「...我的保存按鈕在我的DetailViewController中調用準備,將更改存儲在我的資產中,然後跳回(到錯誤的表)。」你是什​​麼意思「電話準備」? 「跳回」是什麼意思?顯示該代碼。 –

+0

好吧,我發現我的錯誤,我控制 - 從畫布上的故事板拖動我的保存按鈕到退出事件,並選擇了展開一個tableview一個segne。我想假設它可以在代碼中動態地更改正確表的被調用的unwind方法:) – user3354754

相關問題