【问题标题】:Have a control selected in a loaded view在加载的视图中选择一个控件
【发布时间】:2011-06-16 21:35:29
【问题描述】:

我有一个关于使用 NSViewController 和在视图之间切换的问题。我有一个 Cocoa 应用程序,其中有一个窗口。窗口的想法是它将一个一个地显示许多视图,其中每个视图都存储在一个单独的 XIB 文件中。每个视图都有一个对应的 NSViewController。我做了一个最小的例子,说明我在做什么,只加载第一个视图。

@interface MyWindowController : NSWindowController {
    NSViewController *currentViewController;
}
@property (assign) IBOutlet NSView *targetView;
@end

@implementation MyWindowController

@synthesize targetView;

- (id)init
{
    return [super initWithWindowNibName:@"MyWindow"];
}

- (void)dealloc
{
    [currentViewController release];
    [super dealloc];
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    currentViewController = [[NSViewController alloc] initWithNibName:@"FirstView" bundle:nil];
    [self.targetView addSubview:currentViewController.view];
    [currentViewController.view setFrame:targetView.bounds];
}

@end

当窗口被加载时,来自 FirstView.xib 的视图也被加载并且视图显示在窗口中。在这种情况下,加载的视图只有一个文本字段,我希望突出显示文本字段,以便可以直接将输入写入其中,而无需用户单击它,但我不知道该怎么做。是否可以在加载视图时选择文本字段?

阅读文档后,我发现我可能想将窗口的 initialFirstResponder 设置为文本字段,但是当文本字段与窗口位于不同的 XIB 文件中时,我找不到如何执行此操作。

【问题讨论】:

    标签: objective-c cocoa nsview nswindowcontroller nsviewcontroller


    【解决方案1】:

    每当您添加/替换子视图并希望它成为第一响应者时,让您的窗口控制器使视图成为窗口控制器管理的窗口的第一响应者:

    [[self window] makeFirstResponder:currentViewController.view];
    

    您需要在 -windowDidLoad 和任何其他添加/替换子视图的方法中执行此操作。

    【讨论】:

    • 为了记录,不仅设置视图,而且设置它的 netKeyView 成为第一响应者,并将 IB 中的相应出口设置为文本字段,我可以在加载视图后选择文本字段。否则视图本身会成为第一个响应者,当按下选项卡时将选择文本字段。
    • @Brian True;这取决于子视图实际上是什么。
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多