如何将UIButton子类化以允许复制和编码以进行存档?

时间:2012-02-24 22:20:57

标签: objective-c uibutton nscoding archiving nscopying

我有一个应用程序,我需要跟踪始终按下的最后一个按钮。所以我实现了这个方法:

-(void) lastButtonPressed: (id)sender
{
    lastButtonPressed = (UIButton *)sender;
}

然后当按下任何按钮时,我打电话:

[self lastButtonPressed = xButton];

完美的作品。但是现在我正在努力在视图消失或关闭时归档我的应用程序中的所有对象,然后取消归档它并且UIButton不符合NSCopying或NSCoding。我已经读过我可以继承UIButton并定义方法,但我被困在那里。

因此,当我的应用关闭或视图消失时,我想保存lastButtonPressed。

我创建了一个名为BIDPersistence的新类来保存我的归档数据。在我的应用程序的视图控制器中,我有一个saveData方法,我保存我的数据。我在下面显示的最后一行收到错误,因为UIButton不符合。

BIDPersistence *persistence = [[BIDPersistence alloc] init];
    persistence.field1 = [NSNumber numberWithDouble:double1];
    persistence.field2 = [NSNumber numberWithDouble:double2];
    persistence.field3 = display.text;
    persistence.field4 = tapeDisplay.text;
    persistence.field5 = [NSNumber numberWithBool:continueTape];
    persistence.field6 = [NSNumber numberWithBool:newDouble];
    persistence.field7 = lastButtonPressed;

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:1)

听起来你不必保存实际按钮,只知道最后按了哪一个按钮。为此,您可以使用NSUserDefaults,这有助于节省少量花絮,而无需设置核心数据等。我建议给每个按钮一个唯一的标签(在界面构建器中,只是一个int),然后执行以下操作:

[[NSUserDefaults standardUserDefaults] setInt:[lastButton tag] forKey:@"LastButtonPressed"];

稍后您可以使用viewWithTag:检索按钮。

答案 1 :(得分:0)

你不能真正继承UIButton。它不是一个单独的类,而是正如他们所说的那样UIKit根据UIButton的{​​{1}}选择的类集群。

那就是说,它(似乎)符合+ (id)buttonWithType:(UIButtonType)buttonType(只是阅读文档;我不知道NSCoding的东西是如何工作的。)