您将如何模仿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 = @“”;并且数字格式化了您原来的方式,它显示了数字。我现在遇到的主要问题是让它()和 - 弹出正确的位置。
答案 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的我只会显示一串数字,除非您想要格式化非美国数字。您还应该在电话应用程序中输入数字,以查看如果您想完全模仿它,它会如何响应。