`
enfeng.yang
  • 浏览: 6592 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何保存窗口状态

    博客分类:
  • iOS
阅读更多

      在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;
}

 通过以上基本既可实现窗口状态的保存 

 

 

1
0
分享到:
评论
1 楼 jinlianhai 2013-06-07  
试过了,demo没有实现 窗口状态的 保存!

相关推荐

    保存上一次显示该窗口时的状态

    2. **用户交互状态**:除了基本的布局,保存窗口状态还包括用户与窗口的交互内容。例如,用户在文本编辑器中输入的文字、未完成的操作、滚动条的位置、打开的文件或者选项卡等,都会被记录下来。这使得用户可以无缝...

    C# 保存当前窗口的位置,大小,支持多显示之间屏幕切换,无需ini文件[WindowsSize]

    实现这一功能时,开发者通常会在窗口关闭事件中保存窗口状态,然后在窗口加载或初始化事件中恢复这些状态。以下是一个简单的示例: ```csharp using System.Configuration; using System.Windows.Forms; public ...

    保存窗口设置 保存窗口设置 vb

    在VB(Visual Basic)编程中,保存窗口设置通常是指程序运行时用户自定义的窗口位置、大小、状态(如最大化、最小化)等信息,在程序关闭后能够被保存,并在下次启动时自动恢复这些设置。这能提升用户体验,因为用户...

    易语言窗口原地翻转

    1. **保存窗口状态**:使用`CreateCompatibleBitmap`创建与窗口相同的位图,然后使用`SelectObject`选择该位图到设备上下文(DC),接着调用`BitBlt`函数将窗口的内容复制到位图中。 2. **翻转位图**:根据需求,你...

    易语言批量保存组件状态

    "保存_窗口组件设置"函数是易语言提供的一种方法,用于保存一个窗口中所有组件的状态。 在描述中提到的"加载_窗口组件设置",则是读取之前保存的状态,并恢复到相应的组件上。这样,当用户关闭并重新打开程序时,...

    单文档程序窗口最大化问题汇总

    另一种解决方法是取消VC2010程序默认的保存窗口状态功能。在`ExitInstance()`中添加`CleanState();`调用,这将清除所有窗口状态,包括最大化、最小化等。不过,这样做的副作用是会丢失所有窗口状态,而不仅仅是最大...

    rcp定制应用程序窗口属性

    在保存窗口状态方面,如果不需要在退出时保存窗口布局,可以修改ApplicationWorkbenchAdvisor的initialize()方法,将saveAndRestore设置为false: ```java configurer.setSaveAndRestore(false); ``` 窗口样式的...

    易语言批量保存组件状态源码.rar

    《易语言批量保存组件状态源码》是一款专为易语言编程环境设计的实用工具,它主要解决了在开发过程中,如何方便、快捷地保存和恢复组件的状态问题。在编写程序时,有时我们需要记录用户对界面组件(如按钮、文本框、...

    RCP常用方法,RCP常用方法

    这是因为保存窗口状态可能会对程序性能产生轻微影响,特别是在应用程序频繁启动和关闭的情况下。通过简单修改`ApplicationWorkbenchAdvisor`中的代码,可以实现这一需求。 **步骤**: 1. **定位代码**:找到`...

    保存数据窗口内容到数据库

    - **提交处理**:最后一步是将缓存区中的更改提交到数据库,并更新数据窗口的状态。 #### 3. 实现细节 根据提供的代码片段,我们可以更深入地理解这一过程: ```plaintext adw_DataWindow.AcceptText() // 接受...

    HTML一键打包EXE工具1.9.96最新版 (解压密码1234)

    1. 新增自动保存窗口状态功能 在高级设置中, 新增了自动记录窗口信息的选项, 勾选后, 每次关闭EXE之前, 它都会记录当前窗口的位置和大小信息, 下次启动的时候可以自动恢复成上次关闭的样子. 2. 优化一机一码...

    PB数据窗口保存为Excel文件

    6. pb.pbw:这是PowerBuilder的工作区文件,记录了项目、窗口、库等的组织结构和打开状态。 在实现“PB数据窗口保存为Excel文件”的过程中,通常需要以下步骤: 1. 创建或选择一个数据窗口,该窗口应包含要导出的...

    身份证号码校验.pdf

    * 动态设置窗口位置和大小,并保存窗口状态 * 双击主窗口弹出“打开”对话框 第三章:菜单、工具栏和状态栏应用实例 * 获取了标题栏高度和标题栏上按钮的尺寸 * 定制了标题栏文字和添加了标题栏右键菜单项 * 屏蔽...

    TitleWidonw

    通过监听这些事件,开发者可以执行相应的业务逻辑,例如保存窗口状态或更新数据。 总的来说,TitleWindow是Flex4中一个强大的组件,它为构建富交互的应用程序提供了窗口化的基础。通过深入理解和定制,可以创建出...

    asp.net 保存窗口设置源码

    2. HTML或ASPX页面,可能包含JavaScript代码来获取窗口状态并发送到服务器。 3. 可能还有一个数据库连接文件或配置文件,用来存储用户的窗口设置。 4. 另外,可能还有示例的CSS样式文件,用于控制窗口的外观。 学习...

    使窗口打开时时保持上次关闭时的大小

    这通常通过保存窗口的矩形结构(CRect)来完成,它包含了窗口的左上角坐标(left, top)和右下角坐标(right, bottom)。 步骤一:在窗口类的头文件中添加成员变量来存储窗口的位置和大小信息。例如: ```cpp ...

    C#实时窗口截图

    2. **检查窗口状态**:使用`IsIconic` API函数确认窗口是否已被最小化。如果窗口已最小化,那么我们无法抓取其内容。如果窗口可见但位于后台,我们可以继续下一步。 3. **获取窗口矩形**:使用`GetWindowRect` API...

    恢复上次程序关闭后窗口位置状态

    资源作者“神一样的女人”提供的代码可能就是一个具体的示例,演示了如何运用这些API函数来实现窗口状态的恢复。下载资源并查看`content.txt`文件,我们可以学习到实际的代码实现和具体的操作流程。通过这种方式,...

    VB显示窗口和可用窗口遍历子窗口_VB遍历窗口_vb遍历子窗口_

    工程文件(工程1.vbp)记录了整个项目的配置信息,包括引用的库、窗体、模块等,而.vbw文件则保存了项目的当前工作状态。 在实际的代码实现中,可能会有一个事件处理函数,比如窗体的Load事件,用于启动窗口遍历的...

Global site tag (gtag.js) - Google Analytics