Objective-C/C++ocoa试图创建一个带按钮的窗口,不工作?

我应该用c方法创建一个ac类,它是由objective-c和使用cocoa组成的,但是现在我遇到了一个问题,根本无法理解它,因为我对目标很新-C.还有一点是我应该能够从c创建窗口和按钮.因此,当我构建并运行此程序时,它会启动,但会立即变为“无响应”状态.无论如何,这是我得到的:

在window.h

#ifndef WINDOW_H
#define WINDOW_H

class Window {
    public:
        Window();
        void createButton();
};

#endif

Window.mm

#include "Window.h"
#include "Button.h"

Window::Window(){
    NSWindow *window = [[NSWindow alloc]
        initWithContentRect: NSMakeRect(100, 100, 200, 200)
        styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask
        backing: NSBackingStoreBuffered
        defer: NO];
    [window setTitle: @"Test window"];
}

void Window::createButton(){
    Button *button;
    [[this contentView] addSubView: button];
// word this gives warning: no '-addSubView:' method found
// this is probably causing the problem I have
    }

Button.h

class Button{
    Button();
};
// There will be more methods here eventually

Button.mm

#include "Button.h"
Button::Button(){
    NSButton *button = [[NSButton alloc]
        initWithFrame: NSMakeRect(14, 100, 120, 40)];
    [button setTitle: @"Hello world"];
    [button setAction: @selector(invisible)];
    [button setBezelStyle: NSRoundedBezelStyle];
    [button setButtonType: NSMomentaryLightButton];
    [button setBezelStyle: NSTexturedSquareBezelStyle];
}

Main.cpp的

#include "Window.h"
#include "Button.h"

int main(int argc, char *argv[]){
    Window x;
    x.createButton();
}

所以,有没有人知道为什么它不起作用,就像我提到的,我是Cocoa和Objective-C的新手,还在学习:P
是的,我试图解决它.

解决方法:

[[this contentView] addSubView:button];

正如您所怀疑的那样,这会导致您的问题. “这”并不是指窗户;它指的是班级本身. (请记住,您的班级不是NSWindow的子类)

一种选择是在标题中声明您的NSWindow,以便可以全局使用.所以制作标题:

#ifndef WINDOW_H
#define WINDOW_H

class Window {
    public:
        Window();
        void createButton();
        NSWindow *window;
};

#endif

然后将上述行更改为:

[[window contentView] addSubview:button]; (另请注意修复’addSubview’的大小写)

这与你的按钮构造函数有类似的问题.您正在创建一个NSButton,但该按钮永远不会再被看到或听到.

上一篇:Python练习(二) 4位数四则运算


下一篇:使用easy_install在Cocoa应用程序中捆绑python工具