我是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
我真的不知道为什么。
答案 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];