我正在使用书籍应用程序,我想使用页面标记来帮助用户记住他停止阅读的位置。所以我添加了一个带图像的条形按钮(“mark.png”)。在点击章节视图时,标记视图将添加到章节视图中,如果再次点击该标记视图,则标记将从superView
中删除。我正在使用此代码:
- (void)showMark {
if (![markView superView]) {
[chapterOne addSubView:markView];
}
else {
[markView removeFromSuperView];
}
}
它工作正常但是我一直退出应用并再次重新运行标记视图已经消失,那么我该如何保留它?
我发现一些论坛讨论NSUserDefaults
来保存动作,但我真的不知道如何将它与我的代码一起使用。任何帮助将不胜感激。
答案 0 :(得分:3)
您无法使用NSUserDefaults保存整个视图,但您可以保存有助于确定书签设置位置的参数。
例如,如果您使用页码基于书签,则可以在用户离开视图控制器时将页面保存到NSUserDefaults。
示例:
[[NSUserDefaults standardUserDefaults] setInteger:23 forKey:@"bookMarkPage"];
[[NSUserDefaults standardUserDefaults] synchronize];
当用户返回视图控制器时,您可以检查是否有书签:
if ([[NSUserDefaults standardUserDefaults] objectForKey:@"bookMarkPage"] != nil) {
int pageNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"bookMarkPage"];
[self setBookmarkForPage:pageNumber];
}
可能的书签构造方法:
- (void) setBookmarkForPage:(Int)pageNumber {
// run through the logic of placing the bookmark on the correct page
}
您可以使用所需的任何参数来确定书签的放置位置。当用户最初放置书签时,您使用哪些参数来确定书签的放置位置?尝试在用户首次放置书签时使用相同的逻辑。
答案 1 :(得分:2)
我不知道你想要保存什么,但你可以使用NSUserDefaults
来获取任何类型的数据,如下所示:
[[NSUserDefaults standardUserDefaults] setInteger:123 forKey:@"CurrentPageNumber"];
设置完所需的所有值后,保存它们:
[[NSUserDefaults standardUserDefaults] synchronize];
然后,当应用程序打开时,检查是否已设置该值。如果它是你的标记。
if ([defaults valueForKey:@"CurrentPageNumber"] != nil) {
int pageNumber = [defaults valueForKey:@"CurrentPageNumber"]
if (pageNumber == 1) {
[chapterOne addSubView:markView];
}
else {
[markView removeFromSuperView];
}
}
答案 2 :(得分:0)
其他答案说明了解决问题的好方法。为了澄清,NSUserDefaults
不支持UIView或任何衍生产品。 NSUserDefaults
只允许原始对象类型(NSString, NSNumber, NSArray, and NSDictionary
)。可能有一两个我错过了。但UIView
或UIViewController
对象类型无法保存在NSUserDefaults
。