【问题标题】:How to repaint window after hide or show control隐藏或显示控件后如何重新绘制窗口
【发布时间】:2013-03-18 18:46:01
【问题描述】:

我在窗口底部有一个 NSTextField 控件。 我需要根据某些情况显示或隐藏它们。

在初始状态下,控件是隐藏的。 窗口显示控件位置上的空白区域。 在运行时控件应该变得可见

mpTxtCtrl.hidden = NO;

这不会发生。

任务:

1 显示/隐藏控件。

2 根据控件的状态调整主窗口的大小。

我找不到任何关于如何在可可中管理布局的教程。 如果有任何帮助,我将不胜感激!

【问题讨论】:

  • 你在使用自动布局吗?
  • 你的控制是什么?复选框、收音机等?
  • Anoop Vaidya,不,我不使用自动布局。我是 MacOs 编程的新手。请给我一个链接到适当的教程。目标控件 - 是一个文本字段 (NSTextField)。

标签: macos cocoa interface-builder


【解决方案1】:

在运行时控件应该变得可见

mpTxtCtrl.hidden = NO;

这不会发生。

确保将mpTxtCtrl 插座连接到笔尖的文本字段。忘记将插座连接到任何东西是什么都没发生的主要原因。

我找不到任何关于如何在 cocoa 中管理布局的教程。

在编辑笔尖时切换到文件检查器并打开“使用自动布局”。每当您沿着 Aqu​​a 指南(正确放置和调整视图大小时出现的蓝线)放置视图时,Xcode 都会创建约束,而 Cocoa 将在视图大小和窗口发生变化时强制执行这些约束。

更多信息:

【讨论】:

  • 彼得,感谢您的回答。我会更详细地研究建议的指南,我认为它们会对我有所帮助。
【解决方案2】:

检查此代码,如果你会发现一些有用的东西here

-(void)awakeFromNib{
    [self.label setHidden:YES];
}


- (IBAction)showHide:(id)sender {
    NSLog(@"%@",[sender title]);

    if ([[sender title] isEqualToString:@"Hide"]) {
        [self.label setHidden:YES];
        [sender setTitle:@"Show"];
    }
    else if ([[sender title] isEqualToString:@"Show"]){
        [self.label setHidden:NO];
        [sender setTitle:@"Hide"];

    }

}

- (IBAction)maximize:(id)sender {

    NSArray *screens = [NSScreen screens];
    NSRect screenRect;
    for (NSInteger index=0; index < [screens count]; index++) {
        NSScreen *screen = screens[index];
        screenRect = [screen visibleFrame];
    }
    [self.window setFrame:screenRect display:YES];
}

【讨论】:

  • 那么,提问者的问题是什么,这块代码是如何解决的呢?
  • @PeterHosey:他需要在运行时隐藏/显示控件。甚至调整窗口大小。
  • 这是他的目标,而不是他要实现的问题。
猜你喜欢
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2017-08-03
  • 2015-08-25
  • 2011-04-03
  • 2010-10-28
  • 1970-01-01
  • 2014-08-23
相关资源
最近更新 更多