如何打电话、发送短信或在地图上查找地址?

5 浏览
0 Comments

如何打电话、发送短信或在地图上查找地址?

我希望我的应用程序从编码的详细视图中拥有一个分组的表视图。如果点击了电话号码,我希望应用程序拨打选定的电话号码,发送文本或发送电子邮件,如果点击了电子邮件,并在选择了地址时跳转到谷歌地图。

这是我的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;
}

0
0 Comments

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:)方法将地图缩放到适合所有标注的区域。

0
0 Comments

如何在地图上找到地址、拨打电话或发送短信?这个问题的出现是因为用户想知道如何在应用中实现这些功能。以下是解决方法:

首先,需要修改代码中的一些部分。代码中的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语句能帮助你实现功能。

0