模仿iphone手机键盘输入



如何模仿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];
    }
}

我也试过,"不在被追加的数字周围。知道为什么什么都没显示吗?

新编辑:

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

我建议创建一个模仿numpad的UIButton s网格,这些按钮都调用一个方法,如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的,我只会显示一串数字,除非你想要格式化非us数字。如果你想完全模仿它,你也应该尝试在手机应用程序中输入数字,看看它的反应。

最新更新