【问题标题】:Hide content view of NSApplication window in order to navigate to main screen隐藏 NSApplication 窗口的内容视图以导航到主屏幕
【发布时间】:2014-08-23 08:17:06
【问题描述】:

最初,我在应用程序主窗口上有自己的设置,即图像视图(用于背景),上面有一组按钮。现在,当用户点击按钮时,将启动相应的课程,即用户被导航到相应的屏幕,即我将视图添加到窗口的内容视图......

[self.window.contentView addSubview:self.lessonScreen.view];

实际上,我知道有一种方法可以在窗口上获取视图(自定义视图),并继续向其中添加我们的视图(用于导航)。然后导航到主屏幕(窗口),我们可以简单地隐藏该视图。但我遵循通过窗口的内容视图添加视图的方法。

但是视图添加得很好,但我无法导航到主屏幕,我尝试了各种方法,以下是我遵循的方法之一:

[[window contentView] setHidden:YES];

现在窗口变成空白,主视图也消失了。

我还尝试枚举 Windows 内容视图子视图中的视图并将其删除,但我遇到了崩溃,并且在这种情况下也会出现更多相同的空白屏幕:(

我也遇到了herethere 的问题,但都没有解决我的问题。

有人可以建议我一种从主窗口中删除内容视图的方法,以便跳转到我的主屏幕,因为我有用于用户导航的主菜单按钮。

非常感谢任何帮助,谢谢:)

【问题讨论】:

  • 你想做什么?你想用另一个视图替换一个视图吗?
  • 最初我们有窗口(主屏幕),对吧?在那我有我的视图设置,即带有背景、按钮等的图像视图。现在当按下按钮时,我通过访问 windows 内容视图添加子视图属性导航到相应的视图。这就是我们继续做的方式,现在我在视图下方有一个主菜单按钮,如果我点击它,我应该转到主菜单(主窗口)屏幕,即删除所有添加的内容视图
  • 作为一个警告,不要在不相关的问题上向 cmets 发送垃圾邮件,要求人们回答您的问题。我刚刚删除了其中的一堆,因为它们在整个网站上都被标记了。

标签: cocoa hidden nswindow setcontentview


【解决方案1】:

将此方法连接到适当的按钮或菜单项

- (IBAction)deliteAllSubviews:(id)sender {

    NSArray* views = [[window contentView]subviews];

    for (NSView* view in views) {   
        [view removeFromSuperview];
    }
}

【讨论】:

  • 这将删除 window.contentView 的所有子视图。只需比较您查看对象(您要删除)并使用 removefrom superview。
  • 崩溃:<__nsarraym:> 在枚举时发生了突变。
  • 添加 NSMutableArray *arrtoDelete = [视图 mutablecopy];在你的 for 循环之前再试一次
  • @Student 如前所述,面临黑屏问题,即我无法查看我的主屏幕(主窗口)
【解决方案2】:

我的基础基础不正确,之前我没有创建自己的类来处理主视图控制器。这就是事情变得奇怪的原因。

只需通过创建我们自己的 NSViewController 类来创建我们的主菜单视图,然后通过添加我们的 appDelegate 文件的- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 方法来添加与我们窗口的内容视图相同的内容,即:

self.mainViewController = [[MainViewController alloc]initWithNibName:@"MainViewController" bundle:nil];
self.window.contentView = _mainViewController.view;

现在我们已经开始将自己的视图添加到窗口的内容视图中,为了导航到主屏幕,我们不需要隐藏内容视图,而是将我们的主视图分配为窗口的内容视图:

-(IBAction)topicButton:(id)sender
{
    [AppDelegate sharedInstance].mainViewController = [[MainViewController alloc]initWithNibName:@"MainViewController" bundle:nil];
    [[AppDelegate sharedInstance].window setContentView:[AppDelegate sharedInstanceofAppDelegate].mainViewController.view];
}

注意:这里的 [AppDelegate sharedInstance] 是我们的应用委托类的实例,即:

+(AppDelegate *)sharedInstance
{
    if (!sharedAppDelegate) {
        sharedAppDelegate = (AppDelegate *)[[NSApplication sharedApplication]delegate];
    }
    return sharedAppDelegate;
}

就是这样,我们现在可以在点击主题或主菜单按钮时将用户导航到主屏幕:)

希望对您有所帮助,感谢大家的关心 :)

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多