iOS开发时一般使用UserDefaults来存取App的配置信息,但是如果需要保存一些敏感信息的话,这时可以考虑使用Keychain来存取。开发时需要注意的是,App卸载后UserDefaults的内容会被删除,而Keychain里面的则不会,如果首次将内容写入Keychain,需要判断Keychain中是否包含之前没有删除干净的内容。
Keychain(钥匙串)是苹果公司Mac OS中的密码管理系统,iOS出现后也被引入到iOS中,作为用户密码管理的重要工具。使用Keychain对开发者来说,可以省略掉敏感信息的加密和解密的过程,交由系统管理。
Read more…
我们知道WEB服务器的Session是与客户端浏览器线程关联的,如果用户关闭了浏览器,服务端创建的Session对象也将会失效,但是,IIS在处理Session时,默认配置下,并不回立即将用户Session失效,通常需要等待1分钟左右时间,在这1分钟期间,用户的Session信息依然存储在服务端内存,如果被非法劫持利用的话很容易造成安全问题,所以在某些特定的场合,需要用户在页面窗口/标签关闭后,立即废止Session。
以下是一种简单的方法
1.窗口关闭后立即弹出一个新页面
2.新页面中将Session内容废止
存在的问题:
1.弹出新窗口的代码可能会被浏览器禁止,如果不需要弹出新窗口,可以使用Ajax向服务器发送一个请求即可。
2.如果存在服务端窗口关闭事件,这部分服务端代码可能不会被执行。
Read more…
UITabBarController可以实现多个UIViewController独立显示,但是各个UIViewController之间的关系的控制就不太好控制了,特别是没有记录最近一次选中的tab编号,有些需求的实现就比较困难了,比如在A tab下通过一个事件可以切换到上一次选中的B tab,或者A tab中的事件需要切换到B tab并且在B tab处理完成后可以返回到A tab。这时如果可以知道UITabBarController上一次选中的tab编号的话,就可以满足这类需求了。
Read more…
iOS中UIActionSheet在SDK中只提供了少数几种样式,这些样式基本可以满足开发需求了,但是也会遇到比较麻烦的要求,这是就需要单独定制UIActionSheet,通过修改button的属性来实现修改,如果是ios4或者之前版本操作起来比较复杂,但是ios5以后,UIActionSheet中的button换成UIButton类型以后就比较容易了,可以直接便利UIActionSheet的所有subview,找到对应的button就可以修改它的属性,实现还是很简单的,需要注意的是UIActionSheet中button列表中的button索引id可以直接使用tag属性来直接获取,这就很方便找到它们了
Read more…
iOS中UIAlertView很少有单独定制的需要,一般采用系统样式即可,但是有时候一些特殊的需求(比如:UIAlertView的字体,字体大小,字体对齐方式变化等)就不得不需要单独对UIAlertView进行定制了。
定制的方法也很简单,在viewController的Delegate实现方法willPresentAlertView中遍历UIAlertView下面所有subview,找到对应的UILabel再对UILabel的属性进行修改即可。操作基本一致。
Read more…
iOS SDK提供的日期时间格式化对象需要使用到NSLocale对象来控制日期和时间的显示,en_US为标准的格式往往使用的最多,但是习惯使用Java或C#的朋友会忽略掉iOS SDK提供的另一种格式en_US_POSIX,并且两种格式运行后的效果完全一样。
Read more…
UITableView控件在iPhone/iPad开发过程的控制有很多很有意思的地方,比如实现在Android中常见的滚动控制并返回到最顶端效果,通过以下代码可以实现,但是需要注意的是,iOS的SDK中的UITableView的scrollRectToVisible方法的参数不能是全0的Rect,否则无效。
参考代码;
//CGRectMake(0, 0, 1, 1)可以直接返回到UITableView的最顶端
[tableview scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
//CGRectMake(0, 0, 0, 0)设定无效
//[tableview scrollRectToVisible:CGRectMake(0, 0, 0, 0) animated:NO]; |
//CGRectMake(0, 0, 1, 1)可以直接返回到UITableView的最顶端
[tableview scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
//CGRectMake(0, 0, 0, 0)设定无效
//[tableview scrollRectToVisible:CGRectMake(0, 0, 0, 0) animated:NO];
Recent Comments