2017-04-15 13 views
0

Hallo allerseits ich war Wunder, wenn Sie die Zellen innerhalb einer Schaltfläche aktualisieren können? Ich habe den Code, wo die Taste gedrückt wird und es bekommt Ihre lat/lng und drucken sie aus, aber jetzt versuche ich die Lat und Lng Zellen in meiner anderen schnellen Datei CoordinatesAltitudeDegreesTableViewCell.swift ab sofort meine Tabellenansicht zu aktualisieren Funktionen scheinen zu funktionieren und ich habe versucht, die Zelle in der Funktion in der ViewController zu aktualisieren und es funktioniert.Aktualisieren von Tabellenansicht Zellen mit einer Schaltfläche in swift

Meine Frage ist ohnehin, diese Funktionen in der Taste zu setzen, so dass die lat/lng Variablen in ihrem Umfang ist

Nebenbei bemerkt: ive für Lösungen für zwei Tage suchen, und ich könnte scheinen, jede Seite zu finden, hoffentlich habe mir geholfen, ist dies nicht ein Umbuchen und wenn es im Voraus

* wieder, dann sorry, sorry, ich bin sehr neu zu schnelle Programmierung

import UIKit 
import Alamofire 
import SwiftyJSON 
import CoreLocation 
import MapKit 

class myTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, CLLocationManagerDelegate{ 

//---------------------- 
// Buttons and Variables 
//---------------------- 
var lastLocation: CLLocation? = nil 
@IBOutlet weak var tableView: UITableView! 
@IBAction func generateInfo(sender: AnyObject) { 

    locationManager.requestWhenInUseAuthorization() 
    locationManager.startUpdatingLocation() 
    let lat: Double! = lastLocation?.coordinate.latitude 
    let lng: Double! = lastLocation?.coordinate.longitude 
    let alt: Double! = lastLocation?.altitude 
    print(lat) 
    print(lng) 
    print(alt) 
    locationManager.stopUpdatingLocation() 

} // end of button 

//-------------- 
// Main Function 
//-------------- 
override func viewDidLoad(){ 
    super.viewDidLoad() 

    print("Hello World") 

    self.tableView.dataSource = self 
    self.tableView.delegate = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


//------------------- 
// LOCATION FUNCTIONS 
//------------------- 
// Represents Location Manager 
lazy var locationManager: CLLocationManager = { 
    let manager = CLLocationManager() 
    manager.delegate = self 
    manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters 
    return manager 
}() 
// Location Authorization Function 
func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus){ 
    if case .authorizedWhenInUse = status { 
     manager.requestLocation() 
    } else { 
     print("yeah... that didn't work") 
    } 
} 
// Location Error handle 
func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { 
    print("that didn't work") 
} 

// Location Object 
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ 

    if let location = locations.first { 
     lastLocation = location 
    } 
} 

//-------------------- 
// TABLEVIEW FUNCTIONS 
//-------------------- 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

    return 10 
} 


public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    if indexPath.row == 0 { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "imageCellCustomCell", for: indexPath) as! ImageCellTableViewCell 


     return cell 
    } 
    else if indexPath.row == 1{ 
     let cell = self.tableView.dequeueReusableCell(withIdentifier: "coordinatesAltitudeDegreesCustomCell", for: indexPath) as! CoordinatesAltitudeDegreesTableViewCell 
     cell.latLabel.text = "text" 
     return cell 
    } 
    else if indexPath.row == 2{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "censusGeographyCustomCell", for: indexPath) as! CensusGeographyTableViewCell 
     return cell 
    } 
    else if indexPath.row == 3{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "nearestAddressCustomCell", for: indexPath) as! NearestAddressTableViewCell 
     return cell 
    } 
    else if indexPath.row == 4{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "populationCustomCell", for: indexPath) as! PopulationTableViewCell 
     return cell 
    } 
    else if indexPath.row == 5{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "ethnicityCustomCell", for: indexPath) as! EthnicityTableViewCell 
     return cell 
    } 
    else if indexPath.row == 6{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "raceCustomCell", for: indexPath) as! RaceTableViewCell 
     return cell 
    } 
    else if indexPath.row == 7{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "ageCustomCell", for: indexPath) as! AgeTableViewCell 
     return cell 
    } 
    else if indexPath.row == 8{ 
     let cell = tableView.dequeueReusableCell(withIdentifier: "populationPyramidCustomCell", for: indexPath) as! PopulationPyramidTableViewCell 
     return cell 
    } 
    else { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "houseHoldCustomCell", for: indexPath) as! HouseHoldTableViewCell 
     return cell 
    } 
} 

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row == 0 { 
     return 300 
    } 
    else if indexPath.row == 1{ 
     return 130 
    } 
    else if indexPath.row == 2{ 
     return 100 
    } 
    else if indexPath.row == 3{ 
     return 100 
    } 
    else if indexPath.row == 4{ 
     return 90 
    } 
    else if indexPath.row == 5{ 
     return 110 
    } 
    else if indexPath.row == 6{ 
     return 200 
    } 
    else if indexPath.row == 7{ 
     return 300 
    } 
    else if indexPath.row == 8{ 
     return 300 
    } 
    else { 
     return 360 
    } 
} 

}

Antwort

0

Sie sollten Variablen innerhalb Ihrer Klasse für lat, long, alt haben und in Ihrem CoordinatesAltitudeDegreesTableViewCell sollten Sie auch diese Variablen haben.

Also zum Beispiel hier ist ein Code-Snippet.

class SomeViewController: UIViewController { 

    // Set these attributes here cause they will be used as your source of data for the UITableViewCell 
    var lat: Int = 0 
    var lon: Int = 0 
    var alt: Int = 0 

    @IBOutlet var tableView: UITableView! 
    @IBOutlet var someButton: UIButton! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     someButton.addTarget(self, action: #selector(self.someButtonClicked(_:)), forControlEvents: .TouchUpInside) 
    } 

    func someButtonClicked(sender: UIButton) { 
     lat = 100 // set to different values 
     lon = 10 // set to different values 
     alt = 30 // set to different values 

     // when you reload the tableView all the `UITableViewDelegate, UITableViewDataSource` codes will be called again therefore refreshing your cells. 
     tableView.reloadData() 
    } 
} 

extension SomeViewController: UITableViewDelegate, UITableViewDataSource { 
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "SomeCustomCell", for: indexPath) as! SomeCustomCell 

     // set the parameters 
     cell.lat = self.lat 
     cell.lon = self.lon 
     cell.alt = self.atl 

     return cell 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1 
    } 
} 

class SomeCustomCell: UITableViewCell { 
    var lat: Int = 0 { 
     didSet { // just in case you don't know about didSet there's an explanation below 
      lblLat.text = "\(lat)" 
     } 
    } 
    var lon: Int = 0 { 
     didSet { 
      lblLon.text = "\(lon)" 
     } 
    } 
    var alt: Int = 0 { 
     didSet { 
      lblAlt.text = "\(alt)" 
     } 
    } 

    ... insert some ui objects here 
    @IBOutlet var lblLat: UILabel! 
    @IBOutlet var lblLon: UILabel! 
    @IBOutlet var lblAlt: UILabel! 
    ... insert some ui objects here 

    override func awakeFromNib() { 
     super.awakeFromNib() 
    } 

    override func setSelected(selected: Bool, animated: Bool) { 
     super.setSelected(selected, animated: animated) 
    } 
} 

Es gibt eine Vielzahl von Möglichkeiten, dies zu tun, aber das ist die einfachste ich mir vorstellen kann.

didSet Erklärung

var someVariable: <SomeDataType> = <SomeValue> { 
    didSet { 
     // this block is called whenever this variable's value is changed (i.e someVariable) 
    } 
} 

zum Beispiel:

var name: String = "" { 
    didSet { 
     print(name) 
    } 
} 

init() { 
    name = "Capaldi" 
    name = "Tennant" 
    name = "Smith" 
    name = "Eccleston" 
} 

In Ihrem Debugger wäre es Ausgabe etwas wie dies seit didSet jedes Mal, wenn Sie den Namen

Capaldi 
Tennant 
Smith 
Eccleston 
+0

gesetzt genannt wurde Hey Zonily, es tut mir leid, dass es so lange gedauert hat, aber komm zurück, aber seri Vielen Dank. Ich versuche jetzt, dies zu implementieren, aber ich kann wirklich verstehen, was dein Code sagt, also hoffentlich funktioniert das und krank lass dich wissen, wenn es tut! –

+0

@MaclaneNugent meine Antwort zu verbessern und sie als die richtige zu markieren, ist der ganze Dank, den ich brauche. Wenn Sie weitere Hilfe benötigen, kommentieren Sie einfach hier und ich werde meine Antwort überarbeiten. –

+0

Das einzige Problem, auf das ich im AddTarget-Teil stoße. Ich habe ** generate.addTarget (self, action: #selector (self.someButtonClicked (_ :)), forControlEvents: .touchUpInside) ** und es sagt "Wert des Typs 'uiBarButtonItem' hat kein Mitglied 'addTarget'" –

Verwandte Themen