我是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)
我真的不知道为什么.
正如文件所说:
讨论
此方法是一个便利构造函数,用于创建具有特定配置的按钮对象.它是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)
