0

创建了我自己的按钮子类,我得到 -[UIRoundedRectButton setup]: unrecognized selector sent to instance 0x7c3e600'。

我认为这是因为 buttonWithType 只是返回一个显然不是橙色按钮类型的按钮,但无法弄清楚如何做到这一点!

  @implementation OrangeButton

    +(id)Create
    {
        OrangeButton *button = (OrangeButton*)[OrangeButton buttonWithType:UIButtonTypeRoundedRect];
        [button setup];
        return button;
    }

    -(void) setup
    {
        [self setBG];     
    }
    -(void)setBG
    {
        [self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
    }

    @end
4

2 回答 2

1

我最近遇到了类似的问题。UIButton 实际上是一个类集群——即当您实例化一个 UIButton 时,您可能会返回一个内部 Button 类(可能不同的类取决于按钮类型,但这是一个实现细节)。有几个这样的 Apple 类(NSData 是另一个)。

不幸的是,这意味着(实际上)不可能继承 UIButton。如果您需要类似的功能但不想/不能使用直接的 UIButton,带有附加 UITapGestureRecogniser 的 UIView 将是我的第一个呼叫点。

编辑:

将 UITapGestureRecognizer 附加到 UIView 提供了与 UIButton 非常相似的(以及额外的额外功能,例如可变数量的点击)功能。但是,而不是编写以下内容:

[someButton addTarget:aTarget action:yourSelector forControlEvents:UIControlEventTouchUpInside];

您需要创建并附加手势识别器:

UITapGestureRecognizer *tgr = [[UITapGestureRecognizer alloc] initWithTarget:aTarget action:yourSelector];
yourUIView.userInteractionEnabled = YES;
[yourUIView addGestureRecognizer:tgr];

如果要使边缘变圆,请添加:

yourUIView.layer.cornerRadius = 5 // example value

要获取图层属性,您需要导入 QuartzCore.h 标头。

于 2012-08-23T04:21:11.990 回答
1

我认为这是可能的,因为我创建了自定义类

在 .h 中,文件

@interface OrangeButton : UIButton
{
}
-(void) setBG;
@end

在 .m 文件中

@implementation OrangeButton

- (id) initWithFrame: (CGRect)frame
{
     self = [UIButton buttonWithType: UIButtonTypeRoundedRect];

     // set frame
     self. frame = frame;

     if (self) 
     {
        // change bg color   
        [self setBG];

        return self;
     }

    return nil;
}

-(void) setBG
{
    [self setBackgroundImage:[UIImage imageNamed:@"bg-button-orange.gif"] forState:UIControlStateNormal];
}

- (void)dealloc
{
    [super dealloc];
}

@end

现在,当您想使用它时,请致电

OrangeButton *obj= [[OrangeButton alloc] initWithFrame: CGRectMake(0, 0, 90, 40)];
[obj setContentMode: UIViewContentModeScaleAspectFit];

// add it to the view
[self addSubview: obj];

// assign action
[obj addTarget: self action: someAction forControlEvents: UIControlEventTouchUpInside]; 

我认为这会做到

于 2012-08-23T05:43:38.697 回答