我有一个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]];
}
}
控制台输出:
2010-03-08 01:32:30.830 AIB[1217:207] tel:01 8350098
正如您所看到的,该号码将转到控制台,但不会拨打。奇怪的是,如果我将最后一个语句更改为:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:171"]];
手机拨打号码171没有任何问题
如下所示,我的特定问题的解决方案是从电话号码中删除空格。我实现了如下:
- (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]];
}
}
答案 0 :(得分:5)
您需要清理用户输入,使其成为有效的tel://
网址。具体来说,这包括剥离:
#
)*
)防止用户恶意攻击 重定向电话或更改 电话或帐户的行为, 电话应用支持最多, 但并非所有特殊人物 在电话计划中。具体来说,如果一个 URL包含*或#字符, 电话应用程序不会尝试 拨打相应的电话 号。
来自URLs for URLs for Telephone Calls RFC:
......空间不得用于手机 URL中的数字作为空格字符 不能在没有的URL中使用 逃避它。
答案 1 :(得分:2)
您需要使用NSString
的{{1}}方法转义空格。
答案 2 :(得分:1)
您的电话号码不能有空格。脱掉它然后再试一次。
答案 3 :(得分:0)
St3fan是对的,您应该在构建stringByAddingPercentEscapesUsingEncoding
实例之前使用NSURL
。 iPhone OS会自动为您做其他魔术。如果你没有百分比转义问题字符,那么URLWithString:
方法将返回nil。