模仿iPhone手机键盘输入

时间:2011-11-30 06:02:34

标签: iphone ios

您将如何模仿iPhone键盘输入。所以,当你点击一个1然后显示2然后它是12 ......所以等等以及() - 。我不想使用实际的手机应用程序,因为我正在创建一个假拨号器,但我希望它看起来和功能有点像实际的东西。

非常感谢任何想法。

编辑:

好的,所以我放入了所需的所有按钮,但我最终将它们全部设为按钮。这些都是链接,包括标签,这是一个按钮和更新程序的样子。

-(IBAction)zeroButton:(id)sender{
self.enteredPhoneNumberString = [self.enteredPhoneNumberString stringByAppendingString:[NSString stringWithFormat:@"%d", "0"]];
[self updateFormattedPhoneNumberLabel];

}

-(void)updateFormattedPhoneNumberLabel {
    if ([self.self.enteredPhoneNumberString length] > 3) {
        NSString *firstThree = [self.enteredPhoneNumberString substringToIndex:2];
        NSString *lastSet = [self.enteredPhoneNumberString substringFromIndex:2];
        self.label.text = [NSString stringWithFormat:@"%@-%@", firstThree, lastSet];
    }
    else if ([self.self.enteredPhoneNumberString length] > 7) {
        NSString *firstThree = [self.enteredPhoneNumberString substringToIndex:2];
        NSString *secondThree = [self.enteredPhoneNumberString substringToIndex:2];
        NSString *lastSet = [self.enteredPhoneNumberString substringFromIndex:2];
        self.label.text = [NSString stringWithFormat:@"(%@) %@-%@", firstThree, secondThree, lastSet];
    }
}

我也试过了“”并没有附加数字。知道为什么没有显示什么吗?

新编辑:

我添加了incomingPhoneNumberString = @“”;并且数字格式化了您原来的方式,它显示了数字。我现在遇到的主要问题是让它()和 - 弹出正确的位置。

1 个答案:

答案 0 :(得分:4)

我建议创建一个模仿小键盘的UIButton网格,这些按钮都调用keyPadButtonTouchedUpInside:(id)sender之类的方法,并且有一个与它所代表的数字相对应的标记。

keyPadButtonTouchedUpInside:(id)sender的实施可能看起来像......

- (void)keyPadButtonTouchedUpInside:(id)sender {
    UIButton *touchedButton = (UIButton *)sender;
    if (touchedButton.tag <= 9) {
         self.enteredPhoneNumberString = [self.enteredPhoneNumberString stringByAppendingString:[NSString stringWithFormat:@"%d", touchedButton.tag]];
         [self updateFormattedPhoneNumberLabel];
    } else {
         // maybe some other code for pounds/stars entered on the keypad if you have these
         // you will also be checking if the user hit the backspace key and trim your
         // phone number string by 1
    }
}

现在您需要实施updateFormattedPhoneNumberLabel

这将查看实例NSString变量self.enteredPhoneNumberString并更新您已有的UILabel以显示该数字。

updateFormattedPhoneNumberLabel可能看起来像......

- (void)updateFormattedPhoneNumberLabel {
    if ([self.self.enteredPhoneNumberString length] > 3) {
         NSString *firstThree = [self.enteredPhoneNumberString subStringToIndex:2];
         NSString *lastSet = [self.enteredPhoneNumberString subStringFromIndex:2];
         self.formattedPhoneNumberLabel.text = [NSString stringWithFormat:@"%@-%@", firstThree, lastSet];
    } else if .... 
      // more conditions to check for other lengths of the 
      // entered number and continue with the proposed formatting methods. 

希望这会让你走上正轨,可能会有更有效的方法来做到这一点,但实际上它不是一个密集的操作,所以我不会太担心优化,除非你看到某种进入滞后,我不会期待。

修改

我可能会更新格式化条件,以便格式化发生在以下行为中。

输入的1-3个数字显示为“1”,“12”或“123”

输入4-7个数字显示为“123-4”,“123-45”,“123-456”或“123-4567”

输入的8-10个数字显示为“(123)456-78”,“(123)456-789”或“(123)456-7890”

输入的11个数字显示为“1+(234)-567-8901”

任何超过11的我只会显示一串数字,除非您想要格式化非美国数字。您还应该在电话应用程序中输入数字,以查看如果您想完全模仿它,它会如何响应。