2

プログラムで作成したボタンは、基本的にクリックしても押されません。なぜですか?何も起こらず、アクションは実行されず、画像は代替画像に変更されません。

(私はMomentaryChangeButtonを使用していますが、MomentaryPushInに設定しました(プッシュしているかどうかを確認するためです。押し下げていません。)

    NSButton *titleButton = [[NSButton alloc]initWithFrame:NSMakeRect(TITLE_BUTTON_X_OFFSET, TITLE_BUTTON_Y_OFFSET, TITLE_BUTTON_WIDTH, TITLE_BUTTON_HEIGHT)];
    [titleButton setBordered:NO];
    [titleButton setNeedsDisplay:YES];
    [titleButton setImage:[NSImage imageNamed:TITLE_BUTTON_NAME]];
    [titleButton setAlternateImage:[NSImage imageNamed:TITLE_BUTTON_PRESSED_NAME]];
    [titleButton setButtonType:NSMomentaryChangeButton];
    [self addSubview:titleButton];

    NSButton *aboutButton = [[NSButton alloc]initWithFrame:NSMakeRect(ABOUT_BUTTON_X_OFFSET, ABOUT_BUTTON_Y_OFFSET, ABOUT_BUTTON_WIDTH, ABOUT_BUTTON_HEIGHT)];
    [aboutButton setBordered:NO];
    [aboutButton setNeedsDisplay:YES];
    [aboutButton setButtonType:NSMomentaryChangeButton];
    [aboutButton setImage:[NSImage imageNamed:ABOUT_BUTTON_NAME]];
    [aboutButton setAlternateImage:[NSImage imageNamed:ABOUT_BUTTON_PRESSED_NAME]];
    [[aboutButton image] setSize:NSMakeSize(ABOUT_BUTTON_WIDTH, ABOUT_BUTTON_HEIGHT)];
    [[aboutButton alternateImage]setSize:NSMakeSize(ABOUT_BUTTON_WIDTH, ABOUT_BUTTON_HEIGHT)];
    [self addSubview:aboutButton];

    NSButton *settingsButton = [[NSButton alloc]initWithFrame:NSMakeRect(SETTINGS_BUTTON_X_OFFSET, SETTINGS_BUTTON_Y_OFFSET, SETTINGS_BUTTON_WIDTH, SETTINGS_BUTTON_HEIGHT)];
    [settingsButton setBordered:NO];
    [settingsButton setNeedsDisplay:YES];
    [settingsButton setButtonType:NSMomentaryChangeButton];
    [settingsButton setImage:[NSImage imageNamed:SETTINGS_BUTTON_NAME]];
    [settingsButton setAlternateImage:[NSImage imageNamed:SETTINGS_BUTTON_PRESSED_NAME]];
    [[settingsButton image] setSize:NSMakeSize(SETTINGS_BUTTON_WIDTH, SETTINGS_BUTTON_HEIGHT)];


    [self addSubview:settingsButton];
4

2 に答える 2

1

ボタンごとにsetTarget:andを実装する必要があります。setAction:


完全な実装は次のとおりです。

-(void)awakeFromNib{

    NSString *SETTINGS_BUTTON_NAME=@"red.png";
    NSString *SETTINGS_BUTTON_PRESSED_NAME=@"green.png";

    NSButton *settingsButton = [[NSButton alloc]initWithFrame:NSMakeRect(20, 500, 120, 32)];
    [settingsButton setBordered:YES];
    [settingsButton setNeedsDisplay:YES];
    [settingsButton setButtonType:NSMomentaryChangeButton];
    [settingsButton setImage:[NSImage imageNamed:SETTINGS_BUTTON_NAME]];
    [settingsButton setAlternateImage:[NSImage imageNamed:SETTINGS_BUTTON_PRESSED_NAME]];
    [[settingsButton image] setSize:NSMakeSize(120,32)];

    [settingsButton setTitle:@"title"];
    [settingsButton setTarget: self];
    [settingsButton setAction: @selector(invisible:)]; //invisible is a selector see below
    [self.window.contentView addSubview: settingsButton];
}

- (IBAction)invisible:(id)sender{ //change this name accordingly
    NSLog(@"yepiiee");
}

編集:私の便利なように、画像、およびフレームの四角形のサイズなど、いくつかの変更を行いました。要件に合わせて変更できます。

于 2012-11-26T08:40:33.707 に答える
0

ボタンを追加するビューのフレームを確認してください。ビューはそのサブビューを描画できますが、ボタンが「可視」フレーム領域にない場合、アクションは受け取りません。

于 2012-11-26T09:26:31.103 に答える