我是MAC OSX应用程序开发的新手.在我的应用程序中,我有三个NSViewControllers,它们是PracticeController,NoteController和QuestionController.我必须从PracticeController和QuestionController导航到NoteViewController并返回到NoteController导航的viewController.
例如:当我们从PracticeController导航到NoteController时,当我们点击NoteController的后退按钮时,我必须来到PracticeController,当我们从QuestionController导航到NoteController时,当我们点击NoteController的后退按钮时,我必须来QuestionController.
请帮帮我怎么做?我正在寻找它.谢谢.
手头的问题是响应者链.根据Apple的说法:
此外,在macOS 10.10及更高版本中,视图控制器参与响应者链.NSViewController
如果我在macOS故事板中使用标准segue,则目标视图控制器的行为与预期一致 - 焦点,键等效,响应者链等.
但是,如果我使用自定义segue,目标视图控制器不会按预期运行:(具体而言,密钥等效项神秘地无法工作 - 但是,在测试中,来自源视图控制器的按钮上的等效键继续工作(这不是' t help/desired)
在macOS 10.12上,我使用以下自定义segue ...我做错了什么?
class PushSegue: NSStoryboardSegue {
override func perform() {
(sourceController as AnyObject).presentViewController(destinationController as! NSViewController, animator: PushAnimator())
}
}
class PushAnimator: NSObject, NSViewControllerPresentationAnimator {
func animatePresentation(of viewController: NSViewController, from fromViewController: NSViewController) {
viewController.view.wantsLayer = true
viewController.view.frame = CGRect(x: fromViewController.view.frame.size.width, y: 0,
width: fromViewController.view.frame.size.width, height: fromViewController.view.frame.size.height)
fromViewController.addChildViewController(viewController)
fromViewController.view.addSubview(viewController.view)
let futureFrame = CGRect(x: 0, y: 0, width: viewController.view.frame.size.width,
height: …Run Code Online (Sandbox Code Playgroud) 我创建了一个NSWindow xib文件,我想在另一个窗口中点击按钮打开它.
现在,为了控制NSWindow的行为,我从xib中的Library拖动了一个对象,并将其更改为我在XCode中定义的NSWindowController(即ListingWindowController)的子类.
类似地,我还创建了一个NSViewController的子类(即ListingViewController)来管理NSWindow中的NSView.为此,我在xib中从库中拖动NSViewController,并将其类更改为ListingViewController.
@class ListingViewController;
@interface ListingWindowController : NSWindowController {
IBOutlet ListingViewController *listingVC;
}
@property (nonatomic, retain) IBOutlet ListingViewController *listingVC;
@end
Run Code Online (Sandbox Code Playgroud)
我在IB中连接窗口和我的窗口控制器的列表VC.
现在,在我的启动(第一个)窗口中单击按钮调用此窗口,我使用initWithWindowNibName创建窗口控制器,就像这样.
- (IBAction) pushConnect:(id)sender {
NSLog(@"Connect pushed.");
if (wc == nil) {
wc = [[ListingWindowController alloc] initWithWindowNibName:@"ListingWindow" owner:self];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeWindow:) name:NSWindowWillCloseNotification object:nil];
[wc showWindow:sender];
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于,尽管在IB中为即将到来的窗口/视图的视图控制器完成了所有绑定,但即使在加载新窗口(代码下方)之后,窗口和listingVC也会出现(null),(null).
- (void)windowDidLoad {
[super windowDidLoad];
NSLog(@"windowDidLoad = %@, %@", self.window, self.listingVC);
}
Run Code Online (Sandbox Code Playgroud)
请帮助为什么连接不起作用.我正在敲打这个问题已经有一段时间了.
PS:我来自iOS编程背景.所以,我假设Mac的窗口/视图控制器的行为类似于iOS UIViewControllers.
TIA ..
cocoa binding interface-builder nsviewcontroller nswindowcontroller
我有一个问题,我做了一些 iphone 应用程序,现在我想做一个小 mac 应用程序。
从一个干净的应用程序中,我在 MainMenu xib 上添加了一个按钮,然后将 NSViewController 添加到 MainMenu(来自 IB)和一个 Action。我用一个 nib 文件和一个按钮创建了一个新的 NSViewController (FirstViewController)。现在我只想创建一个从 MainMenu 推送 FirstController 的函数和一个从 FirstController 推送 MainMenu 的简单函数。
像这样的东西
ViewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:[NSBundle mainBundle]];
[self.navigationController pushViewController: ViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
我该怎么做???
我在 OS X 10.10 应用程序中玩故事板。我有一个NSTableView,当您单击特定行时会打开一个转场,该转场会转到包含NSViewController.
你如何指定NSPoint弹出框的箭头原点?现在,它只是指向NSTableView中间。我以为我可以在 中做到这一点prepareForSegue,但我似乎无法弄清楚。 prepareForSegue似乎没有理解NSViewController包含在NSPopover
有任何想法吗?
如何使用视图控制器在多个视图之间切换(借助 IBAction)?
这是我到目前为止编写的代码:
在接口文件中我做了一个IBAction:
-(IBAction)Next;
Run Code Online (Sandbox Code Playgroud)
在实现文件中我写了这样的内容:
- (IBAction)Next
{
SecondPopovercontrol *second = [[SecondPopovercontrol alloc] initWithNibName:nil bundle:nil];
[self presentingViewController:second animated: YES completion:NULL]; // This is the step I am facing issues with
}
Run Code Online (Sandbox Code Playgroud)
我无法运行它 - 2 个视图控制器的名称是:WOMPopoverController和SecondPopovercontrol。
错误是:
“WOMPopoverController 没有可见的 @interface 声明呈现 Viewcontroller:animated:completion 的选择器”
我是 StackExchange 的新手,所以如果我的问题有任何不一致之处,请告诉我。并且,请指导我如何解决这个问题。
谢谢
我正在尝试AddSoundEffect为我的主窗口/视图控制器(我正在使用故事板)提供工作表配置视图(),并且当配置视图控制器被解除时,获取在AddSoundEffect视图中输入的值并将其传递回主视图.我在主视图控制器中的当前代码:
presentViewControllerAsSheet(self.storyboard!.instantiateControllerWithIdentifier("AddSoundEffect") as! AddSoundViewController
Run Code Online (Sandbox Code Playgroud)
在AddSoundViewController.swift文件中,解雇它的代码是:
self.dismissViewController(self)
Run Code Online (Sandbox Code Playgroud)
为了传递数据,我有一个独立于类的元组,我将数据保存到.如何添加完成处理程序presentViewControllerAsSheet,并且(可选)是否有更好的方法在视图控制器之间传递数据?
设置:Xcode版本6.4,OS X 10.10.4
我希望能够强制 AVPlayerView 具有 16:9 的纵横比,即使用户决定调整窗口大小。
现在我有了它,以便我的视图以 16:9 的比例 (800x450) 自动打开
截图:http : //imgur.com/FzqRAiO
问题是,如果用户决定调整窗口大小,纵横比可能会倾斜并导致视频周围出现大的黑色矩形。
截图:http : //imgur.com/mCdVOcp
有什么可能的方法可以快速有效地保持/强制纵横比?
我有一个具有以下布局的NSViewController,使用故事板设置:

每个NSTextField的nextKeyView出口按照屏幕截图中显示的顺序配置为下一个NSTextField.例如,我在IB中选择了服务器NSTextField,并从Connectivity检查器中的nextKeyView插座拖动到登录NSTextField,并对其余字段执行相同的操作.
启动应用程序后,任何字段上的任何选项卡按下都会将选择移动到第一个NSTextField.如何在字段之间实现所需的标签?
我在各自的WindowController中试过这个,但无济于事:
- (void)windowDidLoad {
[super windowDidLoad];
self.window.initialFirstResponder = self.serverTextField;
}
Run Code Online (Sandbox Code Playgroud) 我有一个视图控制器 (A),它将显示另一个视图控制器 (B) 作为弹出窗口。
在我的 VC (A) 中是一个带有这个 IBAction 的 NSButton:
self.presentViewController(vcPopover, asPopoverRelativeTo: myButton.bounds, of: myButton, preferredEdge: .maxX, behavior: .semitransient)
Run Code Online (Sandbox Code Playgroud)
结果:
现在我想改变我的弹出框的位置 - 我想把它向上移动。
我试过这个:
let position = NSRect(origin: CGPoint(x: 100.0, y: 120.0), size: CGSize(width: 0.0, height: 0.0))
self.presentViewController(vcPopover, asPopoverRelativeTo: position, of: myButton, preferredEdge: .maxX, behavior: .semitransient)
Run Code Online (Sandbox Code Playgroud)
但立场不变
另一个例子
我有一个分段控件。如果您单击“1”段,将显示一个弹出窗口(与上面的代码相同)。但是箭头指向段“2”而不是段“1”
nsviewcontroller ×10
macos ×8
cocoa ×4
swift ×4
nspopover ×2
objective-c ×2
binding ×1
macos-sierra ×1
nsresponder ×1
nstextfield ×1
nswindow ×1
xcode ×1
xcode6 ×1