在iPhone手机客户端开发过程中经常会涉及到一些问题,如:如何保存窗口状态等等。
当应用别切到后台后,很难保证应用不被杀掉(用户主动杀掉或被系统杀掉),如果被杀掉,当程序
再次启动时就需要恢复前一次状态。ios sdk 6.0提供了一些接口让我们很容易实现对应用状态的保存,具体做法如下:
首先在AppDelegate中要实现如下几个方法:
- (BOOL)application:(UIApplication *)application shouldSaveApplicationState:(NSCoder *)coder { return YES; } - (BOOL)application:(UIApplication *)application shouldRestoreApplicationState:(NSCoder *)coder { return YES; } - (void)application:(UIApplication *)application willEncodeRestorableStateWithCoder:(NSCoder *)coder { [coder encodeObject:self.window.rootViewController forKey:PDAppDelegateRootViewCTLKey]; } - (void)application:(UIApplication *)application didDecodeRestorableStateWithCoder:(NSCoder *)coder { UIViewController * ctl = [coder decodeObjectForKey:PDAppDelegateRootViewCTLKey]; if (ctl) { UIWindow * window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; window.rootViewController = ctl; self.window = window; } }
程序启动时会先调用shouldRestoreApplicationState方法,因为方法返回YES,表明恢复应用状态,这时会顺序调用didDecodeRestorableStateWithCoder方法,最后调用didFinishLaunchingWithOptions, 该方法实现如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (_window == nil) { self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; // Override point for customization after application launch. PDViewController *viewController = [[[PDViewController alloc] initWithNibName:nil bundle:nil] autorelease]; self.window.rootViewController = viewController; } [self.window makeKeyAndVisible]; return YES; }
这里还涉及到一个ViewController的写法,该程序主要是为了保存ViewCtronller中的状态,所以ViewCtronller必须要支持状态恢复,如下:
@interface PDViewController : UIViewController<UIViewControllerRestoration> { int _sliderValue; } @end
为了支持状态恢复必须实现UIViewControllerRestoration接口,同时还有几个方法需要实现:
- (void)encodeRestorableStateWithCoder:(NSCoder *)coder { [super encodeRestorableStateWithCoder:coder]; [coder encodeInt:_sliderValue forKey:@"sliderValue"]; } - (void)decodeRestorableStateWithCoder:(NSCoder *)coder { [super decodeRestorableStateWithCoder:coder]; _sliderValue = [coder decodeIntForKey:@"sliderValue"]; UISlider *slider = (UISlider*)[self.view viewWithTag:SliderTag]; slider.value = _sliderValue; UITextField *textField = (UITextField*)[self.view viewWithTag:TextFieldTag]; textField.text = [NSString stringWithFormat:@"%d", _sliderValue]; } + (UIViewController *) viewControllerWithRestorationIdentifierPath:(NSArray *)identifierComponents coder:(NSCoder *)coder { UIViewController *retViewController = [[[PDViewController alloc] initWithNibName:nil bundle:nil] autorelease]; return retViewController; }
通过以上基本既可实现窗口状态的保存
相关推荐
2. **用户交互状态**:除了基本的布局,保存窗口状态还包括用户与窗口的交互内容。例如,用户在文本编辑器中输入的文字、未完成的操作、滚动条的位置、打开的文件或者选项卡等,都会被记录下来。这使得用户可以无缝...
实现这一功能时,开发者通常会在窗口关闭事件中保存窗口状态,然后在窗口加载或初始化事件中恢复这些状态。以下是一个简单的示例: ```csharp using System.Configuration; using System.Windows.Forms; public ...
在VB(Visual Basic)编程中,保存窗口设置通常是指程序运行时用户自定义的窗口位置、大小、状态(如最大化、最小化)等信息,在程序关闭后能够被保存,并在下次启动时自动恢复这些设置。这能提升用户体验,因为用户...
1. **保存窗口状态**:使用`CreateCompatibleBitmap`创建与窗口相同的位图,然后使用`SelectObject`选择该位图到设备上下文(DC),接着调用`BitBlt`函数将窗口的内容复制到位图中。 2. **翻转位图**:根据需求,你...
"保存_窗口组件设置"函数是易语言提供的一种方法,用于保存一个窗口中所有组件的状态。 在描述中提到的"加载_窗口组件设置",则是读取之前保存的状态,并恢复到相应的组件上。这样,当用户关闭并重新打开程序时,...
另一种解决方法是取消VC2010程序默认的保存窗口状态功能。在`ExitInstance()`中添加`CleanState();`调用,这将清除所有窗口状态,包括最大化、最小化等。不过,这样做的副作用是会丢失所有窗口状态,而不仅仅是最大...
在保存窗口状态方面,如果不需要在退出时保存窗口布局,可以修改ApplicationWorkbenchAdvisor的initialize()方法,将saveAndRestore设置为false: ```java configurer.setSaveAndRestore(false); ``` 窗口样式的...
《易语言批量保存组件状态源码》是一款专为易语言编程环境设计的实用工具,它主要解决了在开发过程中,如何方便、快捷地保存和恢复组件的状态问题。在编写程序时,有时我们需要记录用户对界面组件(如按钮、文本框、...
这是因为保存窗口状态可能会对程序性能产生轻微影响,特别是在应用程序频繁启动和关闭的情况下。通过简单修改`ApplicationWorkbenchAdvisor`中的代码,可以实现这一需求。 **步骤**: 1. **定位代码**:找到`...
- **提交处理**:最后一步是将缓存区中的更改提交到数据库,并更新数据窗口的状态。 #### 3. 实现细节 根据提供的代码片段,我们可以更深入地理解这一过程: ```plaintext adw_DataWindow.AcceptText() // 接受...
1. 新增自动保存窗口状态功能 在高级设置中, 新增了自动记录窗口信息的选项, 勾选后, 每次关闭EXE之前, 它都会记录当前窗口的位置和大小信息, 下次启动的时候可以自动恢复成上次关闭的样子. 2. 优化一机一码...
6. pb.pbw:这是PowerBuilder的工作区文件,记录了项目、窗口、库等的组织结构和打开状态。 在实现“PB数据窗口保存为Excel文件”的过程中,通常需要以下步骤: 1. 创建或选择一个数据窗口,该窗口应包含要导出的...
* 动态设置窗口位置和大小,并保存窗口状态 * 双击主窗口弹出“打开”对话框 第三章:菜单、工具栏和状态栏应用实例 * 获取了标题栏高度和标题栏上按钮的尺寸 * 定制了标题栏文字和添加了标题栏右键菜单项 * 屏蔽...
通过监听这些事件,开发者可以执行相应的业务逻辑,例如保存窗口状态或更新数据。 总的来说,TitleWindow是Flex4中一个强大的组件,它为构建富交互的应用程序提供了窗口化的基础。通过深入理解和定制,可以创建出...
2. HTML或ASPX页面,可能包含JavaScript代码来获取窗口状态并发送到服务器。 3. 可能还有一个数据库连接文件或配置文件,用来存储用户的窗口设置。 4. 另外,可能还有示例的CSS样式文件,用于控制窗口的外观。 学习...
这通常通过保存窗口的矩形结构(CRect)来完成,它包含了窗口的左上角坐标(left, top)和右下角坐标(right, bottom)。 步骤一:在窗口类的头文件中添加成员变量来存储窗口的位置和大小信息。例如: ```cpp ...
2. **检查窗口状态**:使用`IsIconic` API函数确认窗口是否已被最小化。如果窗口已最小化,那么我们无法抓取其内容。如果窗口可见但位于后台,我们可以继续下一步。 3. **获取窗口矩形**:使用`GetWindowRect` API...
资源作者“神一样的女人”提供的代码可能就是一个具体的示例,演示了如何运用这些API函数来实现窗口状态的恢复。下载资源并查看`content.txt`文件,我们可以学习到实际的代码实现和具体的操作流程。通过这种方式,...
工程文件(工程1.vbp)记录了整个项目的配置信息,包括引用的库、窗体、模块等,而.vbw文件则保存了项目的当前工作状态。 在实际的代码实现中,可能会有一个事件处理函数,比如窗体的Load事件,用于启动窗口遍历的...