使用来自多个锚点的相同Storyboard Popover?

时间:2014-06-27 18:29:49

标签: objective-c storyboard uipopover

我在故事板中创建了一个popover,它只显示我选择的列表。我的视图中有多个按钮需要选择列表,但目前看来我必须为每个按钮创建完全相同的弹出框。

有没有人知道在故事板中使用相同popover的方法?

2 个答案:

答案 0 :(得分:4)

使用Storyboard(以及新的和改进的NSViewController),可以很容易地从许多不同的来源创建popover segues。此图显示了最简单的示例;一个文本字段的弹出框,根据按下的按钮而改变:

Storyboard with App running on top

Popover的View Controller被子类化为添加"名称"变量,但您可以在视图中添加要绑定的任何对象。

主视图控制器实现prepareForSegue函数。根据发件人的对象,它设置PopoverController' s" name"不同价值的财产。

此处所需的所有代码使此示例有效:

//  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 } }
    }
}}

答案 1 :(得分:0)

如果你想从不同的按钮呈现相同的popover,那么你应该在代码中实例化内容控制器和popover控制器而不是使用segue,因为segues总是实例化新的控制器。这样的东西应该工作(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];
}