如何在不丢失数据的情况下切换UIViews?

时间:2011-10-05 22:40:53

标签: iphone objective-c ios uiviewcontroller

我构建了一个iphone应用程序,你知道多个视图可以在它们之间切换,但是当我在它们之间切换时我遇到了一个问题:

我切换到的第二个视图有一个UITableView,每次显示它加载了4行,但是当我切换到第三个视图并尝试返回第二个视图时,所有行都消失了。 / p>

我的iPhone模板是基于视图的应用。用于在vies之间切换的代码如下:

 if (self.webController==nil) {
    SearchWebViewController *d=[[SearchWebViewController alloc] initWithNibName:@"SearchWebViewController" bundle:nil];
    self.webController=d;
    [d release];
}
[UIView beginAnimations:@"flipping view" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:UIViewAnimationTransitionCurlUp
                       forView:self.view cache:YES];
[self.view addSubview:webController.view];
[UIView commitAnimations];

如何在视图之间切换并保留数据?

任何想法请尽量保持简单:)

1 个答案:

答案 0 :(得分:0)

您需要了解UITableView的工作原理。它不会“记住”显示哪些行,而是在您滚动或隐藏然后重新显示表时,为需要显示的每一行调用cellForRowAtIndexPath。

因此,您必须保留所显示或可能显示的所有行的“备份副本” - 屏幕上的那些行以及从顶部或底部滚动的那些行。

通常这个“备份副本”是NSMutableDictionaries或自定义对象的NSMutableArray,每个对象代表一行。调用cellForRowAtIndexPath时,可以访问“备份副本”中的值并创建一个单元格来显示数据。如果在单元格中更改了某些内容,则将该更改复制到“备份副本”。