gpt4 book ai didi

objective-c - 如何使用 OS X 10.10 Storyboard指定弹出窗口上箭头的来源

转载 作者:行者123 更新时间:2023-12-02 04:29:30 25 4
gpt4 key购买 nike

我正在 OS X 10.10 应用程序中尝试 Storyboard。我有一个 NSTableView,当您单击特定行时,会打开一个转场,该转场会转到包含 NSViewController 的弹出窗口。

如何指定弹出窗口箭头的原点 NSPoint?现在,它只是指向中间的 NSTableView 。我认为我可以在 prepareForSegue 中执行此操作,但我似乎无法弄清楚。 prepareForSegue 似乎不了解 NSViewController 包含在 NSPopover

有什么想法吗?

最佳答案

如果您认为框架应该以某种方式提供此行为,您应该针对此行为提交增强请求 Radar。


但要同时解决此问题,您可以创建自己的自定义 NSStoryboardSegue 子类来帮助解决此问题。

@interface TablePopoverSegue : NSStoryboardSegue

@property (weak) NSTableView *anchorTableView;
@property NSRectEdge preferredEdge;
@property NSPopoverBehavior popoverBehavior;

@end

@implementation TablePopoverSegue

- (void)perform {
if ([self anchorTableView]) {
NSInteger selectedColumn = [[self anchorTableView] selectedColumn];
NSInteger selectedRow = [[self anchorTableView] selectedRow];

// If we can pick a specific row to show from, do that; otherwise just fallback to showing from the tableView
NSView *anchorView = [self anchorTableView];
if (selectedRow >= 0) {
anchorView = [[self anchorTableView] viewAtColumn:selectedColumn row:selectedRow makeIfNecessary:NO];
}

// Use the presentation API so that the popover can be dismissed using -dismissController:.
[[self sourceController] presentViewController:[self destinationController] asPopoverRelativeToRect:[anchorView bounds] ofView:anchorView preferredEdge:[self preferredEdge] behavior:[self popoverBehavior]];
}
}

@end

这可以在 Segue 的检查器面板中的 IB 中指定(就像 iOS 一样):

Segue Inspector Panel in IB

然后在源 View Controller 的prepareForSegue:中,您可以设置segue:

- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender {
if ([segue isKindOfClass:[TablePopoverSegue class]]) {
TablePopoverSegue *popoverSegue = (TablePopoverSegue *)segue;
popoverSegue.preferredEdge = NSMaxXEdge;
popoverSegue.popoverBehavior = NSPopoverBehaviorTransient;
popoverSegue.anchorTableView = [self tableView];
}
}

关于objective-c - 如何使用 OS X 10.10 Storyboard指定弹出窗口上箭头的来源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24353446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com