-1

我对 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

我真的不知道为什么。

4

1 回答 1

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];

在此处输入图像描述

于 2013-04-17T10:54:13.443 回答