iOS私人通讯录

来源:互联网 发布:淘宝网发空包怎么发? 编辑:程序博客网 时间:2024/05/19 21:59

搭建好了界面,先来看登录界面LWLoginViewController

声明了两个输入框和一个登录按钮

@interface LWLoginViewController ()<UITextFieldDelegate>

@property (weak, nonatomic) IBOutletUITextField *loginText;

@property (weak, nonatomic) IBOutletUITextField *passwordText;

@property (weak, nonatomic) IBOutletUIButton *loginBtn;

@end

1.在LWLoginView中 两个文本框中实现一下代理方法 

在.m文件中实现如下代码:


- (void)viewDidLoad {

    [superviewDidLoad];

    self.loginText.delegate =self;

   }

#pragma 实现协议方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    return NO;

}

运行一下 效果我们可以看的到  在loginText中输入文本是不显示的(一片空白),在passwordText中输入文本可以正常显示 说明这个方法的作用是返回NO表示文本输入框不可以编辑
我们再试一下其他的代理方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{

    return NO;

}

可以看到 password输入框是可以点击的,但是login输入框是不可以点击的


下面言归正传 首先,实现输入用户名和密码 点击登录功能 实现如下代码:

- (void)viewDidLoad {

    [superviewDidLoad];

   //1.拿到通知中心

    NSNotificationCenter *center = [NSNotificationCenterdefaultCenter];

    //2.注册通知

    [center addObserver:selfselector:@selector(TextChanged)name:UITextFieldTextDidChangeNotificationobject:self.loginText];

    [center addObserver:selfselector:@selector(TextChanged)name:UITextFieldTextDidChangeNotificationobject:self.passwordText];

   }

- (void)TextChanged{

    //判断是否同时输入了账号密码

    self.loginBtn.enabled = (self.loginText.text.length && self.passwordText.text.length);

}


- (IBAction)hiddenKeyBoardBtn {

    if (self.loginText.isFirstResponder) {

        [self.loginTextresignFirstResponder];

    }else{

        [self.passwordTextresignFirstResponder];

    }

}


在ViewDidload里面 ,注册了两个通知来监听文本框的内容是否发生了改变,在selector实现的方法里,我们做了一个操作,只有当两个文本框的内容都不为空时,登录按钮的enable才为YES 另外 点击隐藏键盘的按钮  键盘便会判断当前两个文本框到底谁是第一响应着  然后隐藏  点击登录  跳转到联系人界面,这个操作是在storyboard里面做的,也就是无条件的跳转PS 在模拟器上运行的时候 如果不出现键盘 可以按cmd+shift +k 切换模拟器键盘 和电脑键盘


下面实现下记住密码 和自动登录的功能  实现代码如下 :

 /*两个滑块值发生改变都调用这个方法*/

    [self.remPWDaddTarget:selfaction:@selector(PWDSwitchChanged)forControlEvents:UIControlEventValueChanged];

    [self.autoLoginaddTarget:selfaction:@selector(AutoSwitchChanged)forControlEvents:UIControlEventValueChanged];


/*Switch改变的时候*/

- (void)PWDSwitchChanged{

    /*记住密码滑块 */

    if (!self.remPWD.isOn) {

        NSLog(@"没有记住密码");

        self.autoLogin.on =NO;

    }

}

- (void)AutoSwitchChanged{

    /*自动登录*/

    if (self.autoLogin.isOn) {

        NSLog(@"自动登录打开");

        self.remPWD.on =YES;

    }

}


因为没有对应的通知改变事件  所以无法通过通知来实现,不过由于继承了UIControl这个类  所以我们可以同构addtarget来实现这个功能

上面的代码 如果在storyboard连线的时候选的是action 也可以直接这样写:

- (IBAction)remChanged:(UISwitch *)sender {

    /*记住密码滑块 */

    if (!self.remSwitch.isOn) {

        NSLog(@"没有记住密码");

        self.autoSwitch.on =NO;

    }

}


- (IBAction)autoChanged:(UISwitch *)sender {

    /*自动登录*/

    if (self.autoSwitch.isOn) {

        NSLog(@"自动登录打开");

        self.remSwitch.on =YES;

    }


}


这样就省去了上面addTarget的代码 比较方便些
上面的代码改成这样   动画效果更自然

- (IBAction)remChanged:(UISwitch *)sender {

    /*记住密码滑块 */

    if (!self.remSwitch.isOn) {

        NSLog(@"没有记住密码");

//        self.autoSwitch.on = NO;

        [self.autoSwitchsetOn:NO animated:YES];

    }

}


- (IBAction)autoChanged:(UISwitch *)sender {

    /*自动登录*/

    if (self.autoSwitch.isOn) {

        NSLog(@"自动登录打开");

//        self.remSwitch.on = YES;

        [self.remSwitchsetOn:YES animated:YES];

    }

}






0 0