2011-11-30 99 views
0

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

任何想法将不胜感激谢谢。

编辑:

好了,所以我把所有需要的按钮,但我最终把他们都单独的按钮。所有链接包括标签,这是一个按钮和更新程序的样子。

-(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]; 
    } 
} 

我也试过用“”不要附在数字后面。任何想法为什么没有显示?

NEW编辑:

我加入enteredPhoneNumberString = @ “”;并以数字格式显示您原来显示数字的方式。我现在面临的主要问题是获取它,以便()和 - 在正确的位置弹出。

+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)456-78 ” “(123)456-789” 或 “(123)456-7890”

123-4567“ 输入显示为

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

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

+0

谢谢,我会试试听起来不错。 – steven

+0

'stringByAppendingFormat:'可能有点整洁,但无论如何都是+1。 – Tommy

+0

@Chris Wagner所以我添加了它(我放置了上面所做的)我不确定为什么当点击数字按钮时,标签中没有显示文字。任何想法为什么? – steven