为什么我的“tel:”链接不起作用

问题描述 投票:0回答:4

我有一个tableView,其中包含带有电话号码的单元格。该应用程序不是拨打号码。请参阅下面的代码

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
 if (indexPath.section == 2) {
  UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];
  NSString *numberToDial = [NSString stringWithFormat:@"tel:%@", selectedCell.detailTextLabel.text];

  NSLog(@"%@",numberToDial);

  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:numberToDial]];
 }
}

控制台输出:qazxsw poi

如您所见,该号码将转到控制台,但不会拨打。奇怪的是,如果我将最后一个语句更改为:

2010-03-08 01:32:30.830 AIB[1217:207] tel:01 8350098

手机拨打号码171没有任何问题


我的特定问题的解决方案是,如下所示,从电话号码中删除空格。我实现了如下:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:171"]];
iphone cocoa-touch
4个回答
5
投票

您将需要清理用户输入,使其成为有效的- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.section == 2) { UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; NSMutableString *numberToDial = [NSMutableString stringWithFormat:@"tel:%@", selectedCell.detailTextLabel.text]; [numberToDial replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:NSMakeRange(0, [numberToDial length])]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:numberToDial]]; } } URL。具体来说,这包括剥离:

  • 空间
  • 哈希(tel://
  • 星号(#

来自*

为防止用户恶意重定向电话或更改电话或帐户的行为,电话应用程序支持tel方案中的大多数但不是全部特殊字符。具体来说,如果URL包含*或#字符,则电话应用程序不会尝试拨打相应的电话号码。

来自iPhone Dev Center

...空格绝不能用在URL中的电话号码中,因为空格字符不能在URL中使用而不能转义它。


2
投票

你需要使用例如URLs for URLs for Telephone Calls RFCNSString方法来逃避空间。


1
投票

您的电话号码不能有空格。脱掉它然后再试一次。


0
投票

St3fan是对的,你应该在构造stringByAddingPercentEscapesUsingEncoding:实例之前使用stringByAddingPercentEscapesUsingEncoding。 iPhone OS会自动为您做其他魔术。如果你没有百分比逃脱问题字符,那么NSURL方法将返回nil。

© www.soinside.com 2019 - 2024. All rights reserved.