我在故事板中创建了一个popover,它只显示我选择的列表。我的视图中有多个按钮需要选择列表,但目前看来我必须为每个按钮创建完全相同的弹出框。
有没有人知道在故事板中使用相同popover的方法?
答案 0 :(得分:4)
使用Storyboard(以及新的和改进的NSViewController),可以很容易地从许多不同的来源创建popover segues。此图显示了最简单的示例;一个文本字段的弹出框,根据按下的按钮而改变:
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];
}