2017-04-15 139 views
0

大家好,我想知道您是否可以更新按鈕中的單元格?我有代碼按鈕按下,它得到你的經緯度和打印出來,但現在我試圖更新我的其他迅速文件中的Lat和Lng單元格CoordinatesAltitudeDegreesTableViewCell.swift 截至目前我的tableview函數似乎工作,我測試更新viewController函數中的單元格,它的工作原理。用swift快速更新Tableview單元格

我的問題是,反正把這些功能的按鈕,緯度/經度變量範圍

旁註:我一直在尋找解決方案的兩天,似乎我所能找到的任何頁面幫我,希望這心不是一個重新發布,如果有則提前對不起

*再次,對不起,我是很新的編程迅速

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 
    } 
} 

}

回答

0

你應該有你的班級裏的變量lat, long, alt和你的CoordinatesAltitudeDegreesTableViewCell你也應該有這些變量。

例如,這裏有一個代碼片段。

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) 
    } 
} 

有很多方法可以做到這一點,但這是我能想到的最簡單的方法。

didSet解釋

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

例如:

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

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

在調試器,將輸出這樣的事情,因爲didSet在每次您設置的名稱

Capaldi 
Tennant 
Smith 
Eccleston 
+0

時間稱爲嘿,Zonily,我很抱歉,花了這麼長的時間回來評論,但系列非常感謝你。我正試圖實現這一點,但我實際上可以理解你的代碼在說什麼,所以希望這個工作和生病讓你知道是否! –

+0

@MaclaneNugent upvoting我的答案,並將其標記爲正確的是我所需要的所有感謝。如果您需要更多幫助,請在此處留言,我會修改我的答案。 –

+0

我在addTarget部分遇到的唯一問題。我有** generate.addTarget(self,action:#selector(self.someButtonClicked(_ :)),forControlEvents:.touchUpInside) **並且它說「類型'uiBarButtonItem'的值沒有成員'addTarget'」 –

相關問題