Aar*_*ron 2 macos cocoa storyboard
现在我有一个OS X故事板应用程序,它有一个主窗口,上面有一个按钮,触发另一个视图控制器的"show"segue.现在我已经将segue设置为模态,因为如果我不这样做,用户可以再次单击相同的按钮,最后得到同一窗口的两个副本.
有没有办法让我完成这个,而不必重新构建故事板,将这些视图控制器嵌入一个单独的窗口控制器中(这似乎会破坏故事板提供的灵活性的目的)?
Jon*_*Jon 15
编辑:虽然下面的答案确实有效,但绝对不是最好的方法.在故事板中,选择目标视图的视图控制器,然后转到属性检查器并将演示文稿从多个更改为单个.就是这样,不需要代码.
不确定这是最好的方法,但是在NSViewController推送segue时,您可以为目标添加属性,NSViewController并在您的prepareForSegue:sender:方法中分配目标视图控制器.最后,在该shouldPerformSegueWithIdentifier:sender:方法中,检查目标视图控制器是否已分配,如果是,则将其窗口置于前面并返回NO含义不执行segue,否则返回YES.这是一个快速示例(包含在NSViewController按钮中以启动segue):
@interface ViewController ()
@property (weak) NSViewController *pushedViewController;
@end
@implementation ViewController
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
if (self.pushedViewController) {
[self.pushedViewController.view.window makeKeyAndOrderFront:self];
return NO;
}
return YES;
}
- (void)prepareForSegue:(NSStoryboardSegue *)segue sender:(id)sender {
self.pushedViewController = segue.destinationController;
}
@end
Run Code Online (Sandbox Code Playgroud)
当您关闭包含目标视图控制器的窗口时,这会将原始视图控制器的pushViewController属性设置为nil,因此如果窗口尚未打开,则segue将执行.同样,可能有更好的方法来做到这一点.希望这可以帮助.
乔恩
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |