gpt4 book ai didi

objective-c - Cocoa:从另一个类触发 NSWindow makeKeyAndOrderFront 实例方法

转载 作者:行者123 更新时间:2023-12-03 17:37:52 24 4
gpt4 key购买 nike

不是关于窗口的外观 - 或者 - 关于传递参数,而是能够调用 makeKeyAndOrderFront 通过代码(IB 接收器操作可以正常工作,窗口实现 block 中的方法也可以)的实例方法,来自另一个类。

我知道这应该是微不足道的,而且我没有正确掌握消息传递结构或正确执行我的声明,但我已经开始兜圈子,SO和其他博客和论坛上的许多问题还没有解决已经足够接近这种确切的方式来帮助我找到我出错的地方。

虽然我已经尝试了很多事情,但这(尽管不正确)可能是最明显地展示我尝试要做的事情:

NSWindow 子类

@interface hTaskWindow
- (id)initWithContentRect:// etc...

- (IBAction)hWindowActivate:(id)sender;

// ...
@end
@implementation hTaskWindow

- (id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)aStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)flag {

self = [super initWithContentRect:contentRect styleMask:NSFullSizeContentViewWindowMask backing:NSBackingStoreBuffered defer:NO];

[self setTitle:titlename];
[self setStyleMask:[self styleMask] | //


//
// Plus a bunch
// of style
// customisations here
//
// "Visible at launch" is Unticked on this Window.
//
//

-(void)activateDebugWindow { // <--------- I just want to call this from anywhere!
NSLog(@"This works fine when triggered from IB button");
[self makeKeyAndOrderFront:self];
}

-(IBAction)hWindowActivate:(id)sender {
[self activateDebugWindow];
}
@end

NSObject 子类:

@interface AppController : NSObject {
}
@end

@implementation AppController

// whole bunch of working stuff ...
NSLog(@"This logs fine when I press my global hotkey");

hTaskWindow *hwindow; // Nothing happens
[hwindow makeKeyAndOrderFront:(hwindow)]; // Here at all

NSLog(@"This logs fine when I press my global hotkey");
// whole bunch of working stuff ...
@end

目标是从另一个类以编程方式打开 hTaskWindow

  • 我有一个带有热键的菜单快捷方式,直接连接到窗口 Controller 上的接收器操作makeKeyAndOrderFront,该操作打开窗口

    <
  • 我有一个连接到 hWindowActivateNSButton,它也打开窗口

  • 我有一个全局热键,可以成功在 NSLog 中记录条目

但是我想做的是让我的全局热键方法激活在另一个类中打开窗口的函数。

当前从 IBAction 调用的不必要的 -(void)activateDebugWindow 只是尝试设置一个点,让 XIB 一段代码可以带来打开同一个窗口。

最佳答案

hTaskWindow应该在应用程序的 xib 中。在应用程序委托(delegate)中添加一个 socket 以连接到 hTaskWindowhWindowActivate应该在应用程序委托(delegate)中。您可以使用[[NSApp delegate] hWindowActivate:sender]从任何地方激活该窗口。 .

-(IBAction)hWindowActivate:(id)sender { 
[self.hTaskWindow makeKeyAndOrderFront:sender];
}

将 IB 中的菜单项和按钮连接到应用程序代理或第一响应者和 hWindowActivate: .

关于objective-c - Cocoa:从另一个类触发 NSWindow makeKeyAndOrderFront 实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45140255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com