2016-04-28 53 views
0

在UIViewController(splitviewcontroller的詳細視圖)中推入UIButton將打開一個UITableViewController,以彈出窗口的形式呈現。這是由segue完成的,並且「kind」在屬性檢查器中被設置爲「Present as Popover」。當UITableViewController中的UITableViewCell被選中時,我想讓UIViewController捕獲這個選擇。如何使用故事板從彈出窗口訪問父視圖控制器

這就是我想在的UITableViewController做:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let cell = tableView.cellForRowAtIndexPath(indexPath) 
     let myViewController = presentingViewController as! MyViewController 

     myViewController.variable = cell.someProperty 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

這給在日誌中:「致命錯誤:意外發現零而展開的可選值」,表示我無法趕上parentview/presentingview。在閱讀了popovers之後,我覺得我應該實現一個委託和委託方法somwhere。但我沒有注意到如何。

這樣做的正確方法是什麼?

+0

只是這樣做,,, MYViewController.Variable = cell.someProperty .. –

+0

感謝您的建議,但這並不奏效。 –

回答

1

您可能想要使用委託設計模式。

​​

注意myViewControllerDelegate命名,以免與UITableViewController中已經有delegate,這將是類型UITableControllerDelegate的衝突:如果我正確理解你的處境,你可以做這樣的事情實現這一目標。

本示例旨在展示一點。你可能會想使用一個協議來清理它。

+0

謝謝。這似乎是使用NSNotification的一個很好的替代品,並且可能會解決很多我遇到的麻煩。但是,我無法介紹此房產。在func中添加「print(property)」print(「Hi」)myTableViewController(viewController:MyTableViewController,didSelectCellWithProperty property:Int){ // ... }不打印任何東西,就像從未被調用的方法一樣。 –

+1

也許我誤解了。你是否試圖將單元格的屬性發送給MyViewController? –

+0

是,或者來自tableviewcontroller的任何屬性。 –

相關問題