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

Nan*_*noc -1 objective-c ios

我是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
Run Code Online (Sandbox Code Playgroud)

这个类没有任何方法.

这是我的按钮类:

    @interface MyButton : UIButton
{
    MenuItem * buttonInf;
}

@property (nonatomic, retain) MenuItem * buttonInf;

@end
Run Code Online (Sandbox Code Playgroud)

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

MyButton * button = [MyButton buttonWithType:UIButtonTypeRoundedRect];
button.buttonInf = buttoninf;
Run Code Online (Sandbox Code Playgroud)

我试过做:

[button setButtonInf:buttoninf]
Run Code Online (Sandbox Code Playgroud)

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

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-   [UIRoundedRectButton setButtonInf:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)

我真的不知道为什么.

tka*_*kic 5

正如文件所说:

讨论

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

这意味着返回的对象buttonWithType:UIButton(not 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];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述