![](/img/trans.png)
[英]how to get number from json and show that number in dial pad when user tab call button in my custom table view cell
[英]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.