如何打电话、发送短信或在地图上查找地址?
如何打电话、发送短信或在地图上查找地址?
我希望我的应用程序从编码的详细视图中拥有一个分组的表视图。如果点击了电话号码,我希望应用程序拨打选定的电话号码,发送文本或发送电子邮件,如果点击了电子邮件,并在选择了地址时跳转到谷歌地图。
这是我的didSelectRowAtIndexPath...但它没有起作用。我不知道如何获取选定单元格的信息。请帮忙。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { Directory *text = (Directory *)[tableView cellForRowAtIndexPath:indexPath]; //检查文本内容 NSLog(@"选定的电话号码是%@", text); //NSString *dialHome = [dispHomephone stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel:17148581499"]]; }
如果有帮助的话,这是我的cellForRowAtIndexPath。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { int cellPhoneLen = [dispCellphone length]; int workPhoneLen = [dispWorkphone length]; int homePhoneLen = [dispHomephone length]; int emailLen = [dispEMail length]; NSString *address = [NSString stringWithFormat:@"%@\n"@"%@ %@ %@\n"@"%@", dispAddress, dispCity, dispState, dispZip, dispCountry]; static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease]; } cell.selectionStyle = UITableViewCellSelectionStyleBlue; //配置单元格... switch (indexPath.section) { case 1: { if (homePhoneLen != 0) { switch (indexPath.row) { case 0: { if (homePhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"家庭:", @"家庭电话标签"); cell.detailTextLabel.text = dispHomephone; } break; case 1: if (workPhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"工作:", @"工作电话标签"); cell.detailTextLabel.text = dispWorkphone; } break; case 2: if (cellPhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"移动:", @"移动电话标签"); cell.detailTextLabel.text = dispCellphone; } } } } else if (workPhoneLen != 0) { switch (indexPath.row) { case 0: { if (workPhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"工作:", @"工作电话标签"); cell.detailTextLabel.text = dispWorkphone; } break; case 1: if (cellPhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"移动:", @"移动电话标签"); cell.detailTextLabel.text = dispCellphone; } } } } else if (cellPhoneLen != 0) { cell.textLabel.text = NSLocalizedString(@"移动:", @"移动电话标签"); cell.detailTextLabel.text = dispCellphone; } } break; case 2: { if (emailLen != 0) { cell.detailTextLabel.text = dispEMail; } } break; case 3: { cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap; cell.detailTextLabel.numberOfLines = 3; cell.detailTextLabel.text = address; } break; } return cell; }
在didSelectRowAtIndexPath:
方法中,您可以使用indexPath
来确定需要进行的操作(拨打电话、发送短信或在地图上标记地址)。与tel:
和sms:
不同,没有mail:
这样的scheme。您需要使用MFMailComposeViewController
来发送邮件。至于在地图上标记地址,您需要深入研究MapKit。但是,只要您拥有地址的纬度和经度,就可以相对容易地显示地图和位置的标注。
解决方法:
1. 如果需要拨打电话,您可以使用tel:
scheme,将电话号码作为URL的一部分,并使用UIApplication.shared.open(_:options:completionHandler:)
方法打开电话应用程序。
2. 如果需要发送短信,您可以使用sms:
scheme,将电话号码作为URL的一部分,并使用UIApplication.shared.open(_:options:completionHandler:)
方法打开短信应用程序。
3. 如果需要发送邮件,您可以使用MFMailComposeViewController
类来创建一个邮件视图控制器,并使用present(_:animated:completion:)
方法显示视图控制器。
4. 如果需要在地图上标记地址,您可以使用MapKit框架。首先,您需要创建一个MKMapView
实例,并将其添加到您的视图层次结构中。然后,您可以创建一个MKPointAnnotation
实例,并将其添加到地图视图中,使用纬度和经度设置标注的位置。最后,您可以使用showAnnotations(_:animated:)
方法将地图缩放到适合所有标注的区域。
如何在地图上找到地址、拨打电话或发送短信?这个问题的出现是因为用户想知道如何在应用中实现这些功能。以下是解决方法:
首先,需要修改代码中的一些部分。代码中的Directory
类是UITableViewCell
的子类,但第二段代码表明你没有使用UITableViewCell
的子类。将以下代码:
Directory *text = (Directory *)[tableView cellForRowAtIndexPath:indexPath];
修改为:
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
然后,你可以通过以下方式获取UITableViewCell
的值:
NSString *myString = cell.detailTextLabel.text
对于电话功能,可以使用以下代码:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"tel://%@",myString]]]
对于发送短信功能,可以使用以下代码:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"sms://%@",myString]]]
对于地图功能,可以使用以下代码:
myString = [addressText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSString* urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", myString]; [[UIApplication sharedApplication] openURL:[NSURL URLWithString:urlText]];
对于发送邮件功能,可以使用以下代码:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"mailto://%@",myString]]]
如果在点击电话号码时没有任何反应,可能是因为tel://
协议只在iPhone上有效。关于在iPod/iPad上会否报错,我不确定,建议在iPhone上进行测试。关于如何判断单元格中存储的数据类型,我不太清楚你的代码,无法提供帮助。你可以参考这个链接中的代码来判断电话号码的格式:stackoverflow.com/questions/3349494/… 你也可以使用NSPredicate
来判断是否为邮箱。如果既不是邮箱也不是电话号码,那就假设是地址。希望这些信息和一些if
语句能帮助你实现功能。