换个思路实现iOS的密码解锁界面
一个耽搁了很长时间的项目,断断续续做了半年了吧,期间太多事情,二周都不写一句代码的事情经常出现,对这个项目的前景也越来越不看好。不过想到自己做了太多的半途而废的项目,不管怎么样,这个项目还是咬咬牙坚持下去吧。 于是,就这么一直坚持下来了,虽然现在时间更忙了,基本下班后就没时间写代码什么的。 最近,做到一个需要输入解锁密码的功能。 最开始想法是通过UITextFieldDelegate来实现,先回顾UITextFieldDelegate的定义: Managing Editing – textFieldShouldBeginEditing: – textFieldDidBeginEditing: – textFieldShouldEndEditing: – textFieldDidEndEditing: Editing the Text Field’s Text – textField:shouldChangeCharactersInRange:replacementString: – textFieldShouldClear: – textFieldShouldReturn: OK,看到这些,基本上是可以做出想要的效果了。 不过在实际的开发中,发现没那么简单,做出来的东西总不对,总是有问题不好解决。 然后又想到去监视键盘事件,不过觉得这样做会更麻烦。 正在烦躁中突然想到一个办法,把四个密码输入框的enable设置为NO,真正的密码输入的TextField其实是一个大小为0的不可见的一个TextField,然后每次输入一个字符后把响应的字符赋值到4个密码框中的一个,让看起来是输入到四个密码框中。 部分粗略代码如下: -(void) setTextFieldStyle:(UITextField*) textField { [textField setBorderStyle:UITextBorderStyleRoundedRect]; [textField setFont:[UIFont systemFontOfSize:32]]; [textField setTextAlignment:UITextAlignmentCenter]; textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; textField.keyboardType = UIKeyboardTypeNumberPad; textField.secureTextEntry = YES; textField.enabled = NO; } -(BOOL) [...]
解决TTThumbsViewController设置delegate为当前class导致回退按钮消失
今天在做一个照片墙的功能的时候突然发现Three20的一个问题: 我的一个ViewController继承自TTThumbsViewController,这个Controller是由一个UINavigationController通过pushViewController: animated: 方法push出来的。 一开始,一切正常。但是后来我突然间发现UINavigationController的导航按钮消失不见了。 因为在最开始的时候我并没有发现这个问题,直到我把这个功能做的大概七七八八后,在过一次流程的时候才突然发现这个的。 发现UINavigationController的导航按钮消失后,通过注释代码的方法发现了当把TTThumbsViewController的delegate设置为self的时候,导航按钮就消失了。 一开始不得其门道,想不通为嘛当把delegate设置为self后会发生这样的问题,在google半天未见结果的后,决定看下TTThumbsViewController的实现。 在TTThumbsViewController的implementation中发现了以下代码: – (void)setDelegate:(id)delegate { _delegate = delegate; if (_delegate) { self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:[[[UIView alloc] init] autorelease]] autorelease]; self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:TTLocalizedString(@”Done”, @”") style:UIBarButtonItemStyleBordered target:self action:@selector(removeFromSupercontroller)] autorelease]; } } 看到这里就完全明白为什么UINavigationBar的导航按钮会消失不见了,那么要解决这个问题也就简单了,初步想到可以有两种解决方法: 注释掉self.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:[[[UIView alloc] init] autorelease]] autorelease];这句。 把TTThumbsViewController的delegate设置为一个其他的class。 因为我的很多代码直接写到了Controller中,所以我就直接采用了第一种方法了。注释掉那句代码后,可爱的UINavigationBar的导航按钮又回来了。 –EOF