2014-06-27 23 views
1

我在故事板中創建了一個彈出窗口,只顯示我從中選擇的列表。在我的視圖中有多個按鈕,我需要選擇列表,但目前看起來像我必須爲每個按鈕創建完全相同的彈出窗口。從多個錨使用相同的Storyboard Popover?

有誰知道的方式來使用相同的酥料餅的故事板?

+0

你的意思是你在故事板創建的酥料餅的內容視圖控制器?你是否想在你展示popover的時候使用同一個控制器實例,或者只是重用那個類? – rdelmar

+0

是的,我想從多個按鈕使用相同的實例和類,但似乎我只能將它鏈接到一個。例如,如果我在STORYBOARD中創建了一個只有標籤並且顯示「Hello」並想從ViewController上的2個按鈕啓動它的popover,那有可能嗎? –

回答

4

故事板(以及新的和改進NSViewController)這是很容易創建酥料餅來自許多不同來源塞格斯。該圖像顯示了最簡單的示例;與變化取決於在其上按下按鈕,文本字段的酥料餅:

Storyboard with App running on top

視圖控制器爲酥料餅在子類中增加了「名」變量,但你可以添加任何對象()你希望在視圖中綁定。

的主視圖控制器實現prepareForSegue功能。根據哪個對象是發件人,它將PopoverController的「名稱」屬性設置爲不同的值。

這裏的一切所需要的代碼使這個例子工作:

// ViewController.swift 

import Cocoa 

class PopoverController: NSViewController { var name: String? } 

class ViewController: NSViewController { 

override func prepareForSegue(segue: NSStoryboardSegue!, sender: AnyObject!) { 
    if let popoverController: PopoverController? = segue.destinationController as? PopoverController! { 
     if let button: NSButton? = sender as? NSButton! { switch (button!.title!) { 
      case "One": popoverController!.name = "First Button" 
      case "Two": popoverController!.name = "Second Button" 
      default: true } } 
    } 
}} 
+0

這正是我正在尋找的。多個賽段!我爲什麼沒有想到這一點! ;) –

0

如果你想呈現來自不同的按鈕一樣酥料餅的,那麼你應該在實例代碼,而不是使用賽格瑞內容控制器和酥料餅的控制器,因爲塞格斯總是實例化新的控制器。像這樣的東西應該工作(tableVC和popController都強性能),

- (IBAction)showPopover:(UIButton *)sender { 
    if (! self.tableVC) { 
     self.tableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"Table"]; 
     self.popController = [[UIPopoverController alloc] initWithContentViewController:self.tableVC]; 
     self.popController.delegate = self; 
    } 

    [self.popController presentPopoverFromRect:sender.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 
相關問題