0

カスタムボタンをゆっくりと開発しています(クラスの実装方法などを学びながら)。

SuperButton.h (UIControl) をインポートし、SuperButton のインスタンスを作成する ViewController があります。(NSLog で証明されているように、これは機能します。)

しかし、SuperButton でラベルを表示するメソッドを取得できません。これは、「.center」値または「addSubview」コマンドと関係があると思いますか?

よろしくお願いします。ありがとう。

ここに私の SuperButton.m コードがあります:

#import "SuperButton.h"

@implementation SuperButton
@synthesize firstTitle;
@synthesize myLabel;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}
- (void) shoutName{
    NSLog(@"My name is %@", firstTitle);

    self.backgroundColor = [UIColor blueColor];
    CGRect labelFrame = CGRectMake(0.0f, 0.0f, 100.0f, 50.0f);
    self.myLabel = [[UILabel alloc] initWithFrame:labelFrame];
    self.myLabel.text = @"Come on, don't be shy.";
    self.myLabel.font = [UIFont italicSystemFontOfSize:14.0f];
    self.myLabel.textColor = [UIColor grayColor];
    self.myLabel.center = self.center;
    [self addSubview:self.myLabel];
}

私のViewControllerのコードは次のとおりです。

- (void) makeButton{
    SuperButton *button1 = [[SuperButton alloc] init];
    button1.firstTitle = @"Mr. Ploppy";
    [button1 shoutName];
}

(編集:)念のため、ここに SuperButton.h コードがあります:

#import <UIKit/UIKit.h>
@interface SuperButton : UIControl

@property (nonatomic, strong) NSString *firstTitle;
@property (nonatomic, strong) UILabel *myLabel;

- (void) shoutName;

@end
4

2 に答える 2

1

他の場所で答えを見つけました。「ボタン」を追加する必要がありました。私の作業コードは次のようになります。

- (void) makeButton{
    SuperButton *button1 = [[SuperButton alloc] init];
    button1.firstTitle = @"Mr. Ploppy";
    [button1 shoutName];
    [self.view addSubview:button1.myLabel];
    [self.view sendSubviewToBack:button1.myLabel];
}
于 2012-05-16T08:11:48.203 に答える
0

initWithFrame:method ではなく simple でボタンを初期化していますinit。これにより、CGRectZeroサイズのボタンが作成されます。この行を変更します。

SuperButton *button1 = [[SuperButton alloc] init];

これに:

SuperButton *button1 = [[SuperButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100.0f, 50.0f)];

setFrame:または、ボタンを初期化した後に呼び出しを追加します。

于 2012-05-15T13:13:16.450 に答える