iPhone Development Blog系列: 如何制作服务条例窗口

最近一直关注iPhone Development Blog上面的文章,学习的同时尝试通过翻译和整理同大家一起分享!

假设你想让你的每个客户在使用iPhone应用前接受你的服务条例(Terms of Services)或其他一些法律声明。

在启动时显示
通过Xcode生成的标准AppDelegate代码会创建并显示你的第一个应用界面。这是一个你可以通过UIView的hidden属性在不用打断应用接下来的流程情况下显示新界面的地方。

  1. // Create window
  2. self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
  3. [window setBackgroundColor:[UIColor whiteColor]];
  4. // Set up main view navigation controller
  5. MainMenuViewController *navController = [[MainMenuViewController alloc] init];
  6. // Create a navigation controller using the new controller
  7. navigationController = [[UINavigationController alloc] initWithRootViewController:navController];
  8. navigationController.navigationBarStyle = UIBarStyleDefault;
  9. [navController release];
  10. // Create Terms of Service screen
  11. tosController = [[TermsOfServiceViewController alloc] init];
  12. [window addSubview:[tosController view]];
  13. navigationController.view.hidden = YES;
  14. // Add the navigation controller's view to the window
  15. [window addSubview:[navigationController view]];
  16. [window makeKeyAndVisible];

大部分的基础代码都是Xcode生成的。新增代码从第14行开始。实例化TermsOfServiceViewController 并加入到视图中。重要的是第17行,它隐藏了navigationController。

关闭新窗口
现在已经显示了服务条例窗口并且主菜单已经隐藏。我们需要关闭服务条例窗口并回到正常的应用流程。
在AppDelegate类中创建一个新方法:

  1. - (void)termsOfServiceAccepted
  2. {
  3. tosController.view.hidden = YES;
  4. navigationController.view.hidden = NO;
  5. }

在TermsOfServiceController中需要添加一个用户点击的按钮:

  1. UIButton *acceptButton = [[UIButton buttonWithType:UIButtonTypeRoundedRect] retain];
  2. acceptButton.frame = CGRectMake(kLeftMargin,
  3. applicationFrame.size.height - kBottomMargin - kButtonHeight,
  4. applicationFrame.size.width - kLeftMargin - kRightMargin,
  5. kButtonHeight);
  6. [acceptButton setTitle:NSLocalizedString(@"ButtonAcceptTermsOfService", @"") forStates:UIControlStateNormal];
  7. [acceptButton addTarget:self action:@selector(termsOfServiceAccepted:) forControlEvents:UIControlEventTouchUpInside];
  8. [self.view addSubview:acceptButton];

当点击按钮后,就会调用相应的选择器并调用上述提到的AppDelegate中的方法。

  1. - (void)termsOfServiceAccepted:(id)sender
  2. {
  3. id applicationDelegate = [[UIApplication sharedApplication] delegate];
  4. [applicationDelegate termsOfServiceAccepted];
  5. }

只显示一次
利用上述代码服务条例窗口会在每次程序启动的时候都显示。这会很烦人。我们需要加些代码来使其只在NSUserDefaults中的布尔中为YES的时候显示。.

  1. NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
  2. if (![userDefaults boolForKey:TERMS_OF_USE_ACCEPTED]) {
  3. tosController = [[TermsOfServiceViewController alloc] init];
  4. [window addSubview:[tosController view]];
  5. navigationController.view.hidden = YES;
  6. }

在termsOfServiceAccepted方法中设置存储在NSUserDefaults内的布尔值。

  1. - (void)termsOfServiceAccepted
  2. {
  3. tosController.view.hidden = YES;
  4. navigationController.view.hidden = NO;
  5. // Store acceptance in UserDefaults
  6. NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
  7. [userDefaults setBool:YES forKey:TERMS_OF_USE_ACCEPTED];
  8. }

这样只要用户点击接受按钮后服务条例窗体就不显示了。你的客户和法律顾问都会满意的。
原文出处:http://iphoneincubator.com/blog/windows-views/how-to-create-a-terms-of-service-screen

转载于:https://blog.51cto.com/bj007/412477

iPhone Development Blog系列: 如何制作服务条例窗口相关推荐

  1. 十款在线图表制作服务

    原文转载自:http://www.web20share.com/2009/07/10-online-chart-service.html 今天和大家分享一下本站之前介绍过的一些在线制作图表的在线服务, ...

  2. 一个可提供html5制作服务的网站

    2019独角兽企业重金招聘Python工程师标准>>> [TechWeb报道]最近网上出现了一个专门基于HTML5/CSS3制作服务的组织 P2H.cn. 就是专门提供网站切图的一项 ...

  3. iPhone 12 Pro系列终于不怕弯了!

    今年的秋季新品发布会将依旧在9月份举办,届时全新的iPhone 12系列旗舰等多款硬件.软件和服务将悉数与大家见面.近日有外媒带来了iPhone 12系列的新消息,iPhone 12 Pro系列将会采 ...

  4. 兼容台式机电脑服务条例

    兼容台式机电脑服务条例<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  5. 传苹果开发ChatGPT类的AI产品;iPhone 15 Pro系列或将涨价;PyTorch 2.0 发布 |极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  6. 航天航空飞机火箭模型3D打印制作服务/增材制造航空模型制作

    3D打印是对"增材制造"这种材料成型工艺的通俗叫法.3D打印是制造业有代表性的颠覆性技术,区别于传统的材料成型工艺,在加工的过程中材料质量不减反增,通过"自下而上&quo ...

  7. Xcode 4 with External Static Library for iPhone Development

    I upgraded to the latest Xcode 4 and had a tough time using it as things have changed quite a bit. ( ...

  8. iPhone 14 Pro系列传出好消息,有望实现8GB内存自由

    近日据韩国媒体称,苹果或将在今年对iPhone 14 Pro系列上采用更大的8GB内存,对比安卓手机早已实现8GB运行内存自由,苹果的这项决定实属少见. 这条消息援引的是韩国国内供应链消息--表示&q ...

  9. 史上最大内存!曝iPhone 14 Pro系列运行内存将增至8GB

    2月18日消息,据国外媒体报道,供应链的消息称,苹果今年下半年将推出的iPhone 14系列中的高端版本,也就是iPhone 14 Pro系列,运行内存将增至8GB. 外媒是根据供应链爆料人士透露的消 ...

最新文章

  1. 排错之网络映射缓存凭证记录导致备份计划任务失败
  2. c#中使用消息循环机制发送接收字符串的方法和数据类型转换
  3. Linux下文件的压缩和解压
  4. axios学习笔记(二):轻松弄懂XHR的使用及如何封装简易axios
  5. 你一定要知道的敏捷规划工具:影响地图
  6. Maven - Idea解决Maven下载依赖包速度慢问题
  7. centos 7配置rsync源服务器
  8. 使用GDAL将下载的Google卫星图像转为带坐标的tif
  9. 机器学习面试之算法思想简单梳理
  10. mysql5.7 json特性_mysql5.7新增加的JSON数据类型特征介绍
  11. Python请求webserver服务用到的suds、suds-jurko、zeep库相关踩坑指南
  12. 《程序员的职业素养》读书笔记万字总结【建议收藏】
  13. SQL Server+SSMS下载安装
  14. 基于java springboot和vue的酒店管理系统
  15. vue-element-admin整合spring-boot实现权限控制之用户管理篇
  16. 锅炉实现物联网云平台方案
  17. 【SCA-CNN 解读】空间与通道注意力:Spatial and Channel-wise Attention
  18. NVIDIA AGX xavier 系列一 刷机步骤经验总结
  19. html5怎么插入psv,请问psv要怎么才能连接电脑进行文件传输?
  20. Eyenuk宣布FDA核准EyeArt自主AI系统用于糖尿病视网膜病变筛查

热门文章

  1. php spl_autoload_register() 函数
  2. ubuntu下配置jdk(离线压缩包方式)
  3. 01. Node js Hello world
  4. paip.C#.NET JSON解析总结
  5. HDOJ 1228 A+B(map水题)
  6. 设计模式-Factory Method Pattern
  7. 【成长点滴】对SMART原则的一些粗浅理解
  8. PHP中删除目录的三种方法
  9. python基础之字符编码
  10. java - 匿名类