PinEntry 0.0.1

PinEntry 0.0.1

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布上次发布2014年12月

未认领 维护。



PinEntry 0.0.1

  • Vlzcimif Pouzanov

Pin Entry 类

PinEntry 是一个小型库,为 4 位数字密码输入提供支持。

PENumpadView

自定义 UIView,实现了具有支持底部左角额外按钮的 iOS 数字键盘的外观和感受。

放置视图时,最佳框架是 CGRectMake(0, 244, 320, 216)。这是使用 [[PENumpadView alloc] init]; 获取的框架。

自定义 PENumpadView

使用属性 detailButton 来指定可选按钮的外观。

@property (nonatomic, readwrite, assign) NSUInteger detailButon
  • PEKeyboardDetailNone:没有按钮(在点击时不会生成事件)
  • PEKeyboardDetailDone:"完成"按钮
  • PEKeyboardDetailNext:"下一步"按钮
  • PEKeyboardDetailDot:"." 按钮面 VegaCTtton
  • PEKeyboardDetailEdit:"编辑"按钮

处理事件

要处理按键,您需要实现 PENumpadViewDelegate

- (void)keyboardViewDidEnteredNumber:(int)num

当按下数字键时,消息会被发送,num 包含 0..9 范围内的值。

- (void)keyboardViewDidBackspaced

当按下退格键时,消息会被发送。

- (void)keyboardViewDidOptKey

detailButon 不是 PEKeyboardDetailNone 时,会发送消息,并且按下左下角按钮。

如果您定义了 PINENTRY_KEYBOARD_SENDS_NOTIFICATIONS,则每个点击都会生成一个 kPinEntryKeyboardEvent 通知,其中 objectPENumpadViewdetailInfo 包含键 kPinEntryKeyboardCode 和 NSNumber 值。0..9 对应于数字键,-1 – 左下角按钮,-2 – 退格键。

PEViewController

实现密码输入的视图控制器。您可以用它作为模态控制器或将其推入导航堆栈中。

自定义 PEViewController

您可以使用 prompt 属性设置提示文字。

@property (nonatomic, readwrite, copy) NSString *prompt

提示文字会显示在密码框上方。

处理密码输入

一旦用户输入 4 位数字并点击 "完成",PEViewController 就会将 pinEntryControllerDidEnteredPin: 消息发送到其 delegate

- (void)pinEntryControllerDidEnteredPin:(PEViewController *)controller

然后您可以访问 pin 属性,它持有密码代码的字符串表示形式。以下是密码处理的示例实现。

- (void)pinEntryControllerDidEnteredPin:(PEViewController *)controller
{
    if([controller.pin intValue] == 1234) {
        // ...
    }
}

清除输入

您可以使用resetPin方法清除当前密码,使您的PEViewController实例可重用。

PinEntryController

完整的导航堆栈实现,需要请求用户输入密码、更新密码或创建新密码。

验证密码

- (void)verifyPin
{
    PEPinEntryController *c = [PEPinEntryController pinVerifyController];
    c.pinDelegate = self;
    [self presentModalViewController:c animated:YES];
}

- (BOOL)pinEntryController:(PEPinEntryController *)c shouldAcceptPin:(NSUInteger)pin
{
    // Verify the pin, return NO if it's incorrect. Otherwise hide the controller and return YES
    if(pin == mypin) {
        NSLog(@"Pin is valid!");
        return YES;
    } else {
        NSLog(@"Pin is not valid (use %d)!", mypin);
        return NO;
    }
}

设置密码(初始密码,不验证)

- (void)setPin
{
    PEPinEntryController *c = [PEPinEntryController pinCreateController];
    c.pinDelegate = self;
    [self presentModalViewController:c animated:YES];
}

- (void)pinEntryController:(PEPinEntryController *)c changedPin:(NSUInteger)pin
{
    // Update your info to new pin code
    NSLog(@"New pin is set to %d", pin);
    [self dismissModalViewControllerAnimated:YES];
}

更改密码(带当前密码验证,可取消)

- (void)chagePin
{
    PEPinEntryController *c = [PEPinEntryController pinChangeController];
    c.pinDelegate = self;
    [self presentModalViewController:c animated:YES];
}

- (BOOL)pinEntryController:(PEPinEntryController *)c shouldAcceptPin:(NSUInteger)pin
{
    // Verify the pin, return NO if it's incorrect
    if(pin == mypin) {
        NSLog(@"Pin is valid!");
        // Do NOT not hide pinChangeController yet
        return YES;
    } else {
        NSLog(@"Pin is not valid (use %d)!", mypin);
        return NO;
    }
}

- (void)pinEntryController:(PEPinEntryController *)c changedPin:(NSUInteger)pin
{
    // Update your info to new pin code
    NSLog(@"New pin is set to %d", pin);
    [self dismissModalViewControllerAnimated:YES];
}

- (void)pinEntryControllerDidCancel:(PEPinEntryController *)c
{
    NSLog(@"Pin change cancelled!");
    [self dismissModalViewControllerAnimated:YES];
}

待办事项

  • 添加i18n支持
  • 添加视网膜图像