2014-09-10 54 views
2

我有一個主界面控制器,它已經在界面生成器中設置爲通過連接到按鈕的彈出框來打開表視圖控制器。我希望能夠在didSelectRowAtIndexPath中選中彈出式表格視圖中的項目時關閉彈出窗口。在Objective-c中,我只能將prepareForSegue delegate中的segue改爲UIStoryboardPopoverSegue,並將其UIPopoverController傳遞給表視圖控制器。然而,在Swift中,我的downcast失敗了,因爲它將segue看作類型爲UIStorybaordPopoverPresentationSegue(當調試器加入時),它看起來不是公共API。如何在Swift中關閉目標視圖控制器中的彈出框

這裏是我的代碼:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { 
    if segue.identifier == "ShowCollectionsSegue" { 
     if let collController:CollectionsTableViewController! = segue.destinationViewController as? CollectionsTableViewController { 
      if let popoverSegue = segue as? UIStoryboardPopoverSegue { // <-- This fails 
       collController.popover = popoverSegue.popoverController 
      } 
     } 
    } 
} 

如何要挾SEGUE到UIStoryboardPopoverSegue才能訪問其popoverController財產?

我打開解決popover響應表視圖單元格點擊不同方式的問題,但似乎從故事板使用segue時,解除popover的唯一方法是通過持有以某種方式將其添加到popover控制器的引用中,並且據我所知,唯一能做到這一點的方法是將segue轉換爲Swift不想讓我做的popover細節。有任何想法嗎?

回答

1

確實是一個奇怪的問題。我在文檔中注意到,UIStoryboardPopoverSegue確實不是繼承自任何類。這就解釋了爲什麼演員不工作 - UIStoryboardSegue不是它的超類。所以,我只是試圖創建一個新的對象 - 它看起來奇怪,但工作原理:

let popoverSegue = UIStoryboardPopoverSegue(
    identifier: segue.identifier, 
    source: self, 
    destination: segue.destinationViewController as UIViewController) 
println("Is there a controller? \(popoverSegue.popoverController.description)") 
// YES !! 

編輯

但這控制器不會解僱酥料餅:(

解決方法是指定在界面生成器中作爲「不推薦使用的段:Popover」繼續使用,代碼將如預期的那樣

let popoverSegue = segue as UIStoryboardPopoverSegue 
if let destination = segue.destinationViewController as? TableViewController { 
    destination.delegate = self 
    self.popoverController = popoverSegue.popoverController 
} 
+0

感謝您的迴應。似乎用popoverController創建了一個有效的popover segue,但是,當我使用'self.popover!.dismissPopoverAnimated(true)'將其分配給我的目標視圖控制器的屬性後,它將忽略彈出窗口時,它無法解除它。 – 2014-09-10 18:21:45

+0

我剛剛注意到的一些事情......如果您點擊「UIStoryboardPopoverSegue」,它會將您帶到Swift「標題」。在那裏看起來'UIStoryboardPopoverSegue'確實從'UIStoryboardSegue'繼承。 – 2014-09-10 18:49:36

+0

好的,我可以通過在IB中將popover的類型設置爲「Deprecated Segues:Popover」來修復它。很抱歉,目前還沒有適用於自適應分段的解決方案 – Mundi 2014-09-10 20:20:56

相關問題