0

我正在慢慢开发一个自定义按钮(同时学习如何实现类等)。

我有一个 ViewController,它导入一个 SuperButton.h (UIControl),然后创建一个 SuperButton 的实例。(这有效,正如 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

我在别处找到了答案。我需要添加Subview '按钮'。我的工作代码现在看起来像这样:

- (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:方法初始化按钮,而是使用简单的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 回答