簡體   English   中英

當用戶在我的應用程序中按聯系人號碼時,如何獲取電話號碼並在電話撥號盤中顯示該號碼

[英]How to get the phone number and show that number in phone dial pad when user press contact number inside my app

我有一些以下json數據:

這些都將顯示在地圖視圖中。 因此,當用戶按下地圖上的任何圖釘時。 地址,姓名呼叫按鈕將顯示。

我有一個用於該call button action method 它將顯示Address, name, one call button ...因此,如果用戶按下該呼叫按鈕,它將顯示顯示我的name and address的相應或正確的電話號碼,並且應在常規電話撥號盤中顯示。

我客觀地做了一些事情-c。 但是我對Swift 2.0並不滿意。

誰能幫我解決這個問題。

完整代碼:

import UIKit
import MapKit
import CoreLocation

class mapVC: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {

    @IBOutlet weak var mapView: MKMapView!

    @IBOutlet weak var AddressTitleLabel: UILabel!

    @IBOutlet weak var AddressSubtitleLabel: UILabel!

    @IBOutlet weak var LocationView: UIView!

    @IBOutlet weak var ResultCounts: UILabel!

    @IBOutlet weak var AddressImg: UIImageView!

    let locationManager = CLLocationManager()


    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()

        mapSearch()

        LocationView.hidden = true
        locationManager.delegate = self

        locationManager.desiredAccuracy = kCLLocationAccuracyBest


        mapView.delegate = self


    }

    func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {

        print("Inside selecting annotation")

       LocationView.hidden = false

        if let newTitle = view.annotation?.title, let newAddress = view.annotation?.subtitle, let AddressNewImage = view.detailCalloutAccessoryView {

            AddressTitleLabel.text = newTitle

            AddressSubtitleLabel.text = newAddress

            //setting callout accessory as image to UIImage
            UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0);

            AddressNewImage.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

            let NAimage:UIImage = UIGraphicsGetImageFromCurrentImageContext();

            AddressImg.image = NAimage

        }

    }

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location : CLLocationCoordinate2D = manager.location!.coordinate;
        let long = location.longitude;
        let lat = location.latitude;
        CLGeocoder().reverseGeocodeLocation(manager.location!, completionHandler: {(placemarks, error)->Void in
            if (error != nil) {
                print("Reverse geocoder failed with error" + error!.localizedDescription)
                return
            }
        })

        let loadlocation = CLLocationCoordinate2D(
            latitude: lat, longitude: long

        )

        mapView.centerCoordinate = loadlocation;

        let span = MKCoordinateSpanMake(0.2, 0.2)
        let region = MKCoordinateRegion(center: loadlocation, span: span)


        mapView.setRegion(region, animated: true)

        let annotation = MKPointAnnotation()
        annotation.coordinate = loadlocation
        annotation.title = "Current Location"
        annotation.subtitle = "You are Here."

        mapView.addAnnotation(annotation)

        locationManager.stopUpdatingLocation();
    }

    func mapSearch(){

        //Map search for Level Income in the selected region area
        let url:NSURL = NSURL(string: "url")!
        let task = NSURLSession.sharedSession().dataTaskWithURL(url) { (data:NSData?, response: NSURLResponse?, error:NSError?) -> Void in

            do {
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray



                dispatch_async(dispatch_get_main_queue(), { () -> Void in
                    self.ResultCounts.text = "\(json.count) Results"

                    // Loop through all items and display them on the map

                    var lon:Double!

                    var lat:Double!

                    var annotationView:MKPinAnnotationView!

                    var pointAnnoation:LocationClass!

                    //2
                    for item in json{

                        let obj = item as! Dictionary<String,AnyObject>

                        lon = obj["longitude"]!.doubleValue

                        lat = obj["latitude"]!.doubleValue

                        pointAnnoation = LocationClass()

                        pointAnnoation.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: lon)

                        pointAnnoation.title = obj["name"] as? String

                        pointAnnoation.subtitle = obj["address"] as? String

                        pointAnnoation.pinCustomImageName = "other_location.png"

                        let ImageName = obj["image"] as? String

                        let imgURL: NSURL = NSURL(string: ImageName!)!

                        let request: NSURLRequest = NSURLRequest(URL: imgURL)

                        let session = NSURLSession.sharedSession()

                        let Imgtask = session.dataTaskWithRequest(request){
                                (data, response, error) -> Void in

                                if (error == nil && data != nil)
                                {
                                    func display_image()
                                    {
                                        pointAnnoation.DisplayImage = UIImage(data: data!)
                                    }

                                    dispatch_async(dispatch_get_main_queue(), display_image)
                                }

                            }

                            Imgtask.resume()

                        annotationView = MKPinAnnotationView(annotation: pointAnnoation, reuseIdentifier: "pin")

                        self.mapView.addAnnotation(annotationView.annotation!)

                    }

                })

            }catch{
                print("Some error occured")
            }



        }

        // Call the resume() method to start the NSURLSession task
        task.resume()
    }

    func mapView(mapView: MKMapView,
        viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView?{

            let reuseIdentifier = "pin"

            var v = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseIdentifier)
            if v == nil {
                v = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)
                v!.canShowCallout = false
            }
            else {
                v!.annotation = annotation
            }

            let customPointAnnotation = annotation as! LocationClass

            v!.image = UIImage(named:customPointAnnotation.pinCustomImageName)

            v!.detailCalloutAccessoryView = UIImageView(image: customPointAnnotation.DisplayImage)

            return v
    }



    @IBAction func CallButtontap(sender: AnyObject) {

        let phoneUrl: NSURL = NSURL(string: "telprompt:\(item[index]["phone"])")!
        if UIApplication.sharedApplication().canOpenURL(phoneUrl) {
            UIApplication.sharedApplication().openURL(phoneUrl)
        }
    }


    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print("Error while updating location " + error.localizedDescription)
    }

在那我嘗試了:

@IBAction func CallButtontap(sender:AnyObject){

let phoneUrl: NSURL = NSURL(string: "telprompt:\(item[index]["phone"])")!
if UIApplication.sharedApplication().canOpenURL(phoneUrl) {
    UIApplication.sharedApplication().openURL(phoneUrl)
}

}

沒用

最終更新:

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {

        print("Inside selecting annotation")

       LocationView.hidden = false

        if let newTitle = view.annotation?.title, let newAddress = view.annotation?.subtitle, let AddressNewImage = view.detailCalloutAccessoryView {

            AddressTitleLabel.text = newTitle

            AddressSubtitleLabel.text = newAddress

            //setting callout accessory as image to UIImage
            UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0);

            AddressNewImage.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)

            let NAimage:UIImage = UIGraphicsGetImageFromCurrentImageContext();

            AddressImg.image = NAimage
            if (view.annotation is Annotation.self) {
                var annot: Annotation = view.annotation
                var index: Int = self.arrayOfAnnotations.indexOfObject(annot)
                CallButtontap(index)
            }

        }


    }

@IBAction func CallButtontap(sender:AnyObject){

let phoneUrl: NSURL = NSURL(string: "telprompt:\(item[sender]["phone"])")!
if UIApplication.sharedApplication().canOpenURL(phoneUrl) {
    UIApplication.sharedApplication().openURL(phoneUrl)
}

}

這是您的代碼的快速版本:

@IBAction func didTapPhoneButton(sender: UIButton) {
    // This function  will make phone call 
    let phoneUrl: NSURL = NSURL(string: "telprompt:\(myJson[index]["phone"])")!
    if UIApplication.sharedApplication().canOpenURL(phoneUrl) {
        UIApplication.sharedApplication().openURL(phoneUrl)
    } else {
        PCUtilities.showAlertWithTitle("Alert", message: "Call facility is not available!!!", cancelButtonTitle: "OK")
    }
}

還要標記此有用的網站: https : //objectivec2swift.com/#/converter/code

嘗試以下快速代碼:

@IBAction func btn_callTapped(sender: AnyObject) {
        let number = "1234567890" //set user number here.
        let phoneNumber: String = "telprompt://" + number
        UIApplication.sharedApplication().openURL(NSURL(string: phoneNumber)!)
}

該代碼將使您直接致電,也可以在致電后返回您的應用。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM