无法识别的选择器发送到我自己的按钮类的实例

时间:2013-04-17 10:47:44

标签: ios objective-c

我是Objective-C和iOS的新手。我遇到了问题:

我正在动态创建按钮,我需要在按钮上存储一些数据,以便在onClick方法上使用它。我有一个用于存储数据的类,当尝试将该数据存储在按钮上时问题就开始了。

这是要存储的数据类.h:

    @interface MenuItem : NSObject
{
    NSString *name;
    NSString *action;
    NSString *xml;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *action;
@property (nonatomic, retain) NSString *xml;
@end

这个类没有任何方法。

这是我的按钮类:

    @interface MyButton : UIButton
{
    MenuItem * buttonInf;
}

@property (nonatomic, retain) MenuItem * buttonInf;

@end

将数据放入该字段时遇到问题:

MyButton * button = [MyButton buttonWithType:UIButtonTypeRoundedRect];
button.buttonInf = buttoninf;

我尝试过:

[button setButtonInf:buttoninf]

制作那个制定者,但结果相同,总是有:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-   [UIRoundedRectButton setButtonInf:]: unrecognized selector sent to instance

我真的不知道为什么。

1 个答案:

答案 0 :(得分:5)

正如documentation所说:

  

<强>讨论

     

此方法是一种便捷构造函数,用于创建具有特定配置的按钮对象。它是UIButton的子类,此方法不返回子类的实例。如果要创建特定子类的实例,则必须直接分配/初始化该按钮。

这意味着buttonWithType:返回的对象的类型为UIButton(不是MyButton),此类不会声明buttonInf属性。

您必须以不同的方式创建按钮(例如,使用initWithFrame)然后您的QuartzCore将按钮的方面配置为您想要的样式。

使用上面的代码我得到图像中显示的右键

MyButton *button = [[MyButton alloc] initWithFrame:CGRectMake(100, 20, 73, 44)];
button.layer.borderColor = [UIColor lightGrayColor].CGColor;
button.layer.borderWidth = 1.0;
button.layer.cornerRadius = 10.0;
[button setTitle:@"Button" forState:UIControlStateNormal];
[button setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];

enter image description here