2016-04-05 59 views
1

我有兩個tableview。第一個將顯示6個城市,第二個(detail tableview)將顯示基於在第一個tableview中選擇的單元格的細節。我爲每個城市。每當用戶在第一個tableview中選擇一個城市時,我想採用相應的數組來填充第二個視圖控制器。所以我的問題是如何通過prepareforsegue實現它。從Tableview傳遞數據到Tableview詳細信息

//First tableview as initial view 



import UIKit 
import Alamofire 
import SwiftyJSON 

class LandingPageTableViewController: UITableViewController { 

@IBOutlet var tableview: UITableView! 


//predfined array to to holde the data below 

var city = [String]() 
var subtitle = [String]() 
var image = [String]() 

//arrays to hold avaible buildings in the city 

var brickellBuildings  = [[String:AnyObject]]()// 
var miamiBuilBuildings = [[String:AnyObject]]() 
var miamiBeachBuildings = [[String:AnyObject]]()// 
var coconotGroveBuildins = [[String:AnyObject]]()// 
var corolGbalesBuilduings = [[String:AnyObject]]() 
var dowtownMiamiBuildings = [[String:AnyObject]]()// 
var southBeachBuildings = [[String:AnyObject]]() 



override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 
    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 

    tableview.showsHorizontalScrollIndicator = false 
    tableview.showsVerticalScrollIndicator = false 
    tableview.dataSource = self 
    tableview.delegate = self 


city = ["Miami","Brickell","Miami Beach","Down town Miami","South Beach","Corol Gables","Coconut Grove"] 


    subtitle = ["The fab and glam life "," Condos on the highrise","Don't call a comeback","Come on feel the noise ","Push it to the limit","Push it to the limit","Push it to the limit"] 

    image = ["Miami","brickell","miami_beach","downtown_miami","south_beach","coral_gables","coconut_grove"] 



} 

override func viewDidAppear(animated: Bool) { 
    super.viewWillAppear(true) 

    runRequestForbrickell() 
    runRequestForMiamiBeach() 
    runRequestForcocotGrove() 
    runRequestForMiami() 
} 





    func runRequestForbrickell() { 

    Alamofire.request(.GET, "http://android.goidx.com/condos/?tag=brickell&user_id=4").validate().responseJSON { response in 

     if let value = response.result.value { 
      let json = JSON(value) 

      if let resData = json.arrayObject { 

       self.brickellBuildings = resData as! [[String:AnyObject]] 

       // print(resData) 
      } 

      if self.brickellBuildings.count > 0 { 

       self.tableview.reloadData() 
      } 
      } 
      } 
      } 

    func runRequestForMiamiBeach() { 


    Alamofire.request(.GET, "http://android.goidx.com/condos/?tag=south beach&user_id=4").validate().responseJSON { response in 

     if let value = response.result.value { 
      let json = JSON(value) 

      if let resData = json.arrayObject { 

       self.miamiBeachBuildings = resData as! [[String:AnyObject]] 

       // print(resData) 
      } 

      if self.miamiBeachBuildings.count > 0 { 

       self.tableview.reloadData() 
      } 

      } 
      } 
      } 


    func runRequestForcocotGrove() { 

Alamofire.request(.GET, "http://android.goidx.com/condos/?tag=coconut%20grove&user_id=4").validate().responseJSON { response in 

    if let value = response.result.value { 
     let json = JSON(value) 

     if let resData = json.arrayObject { 

      self.coconotGroveBuildins = resData as! [[String:AnyObject]] 

      // print(resData) 
     } 

     if self.coconotGroveBuildins.count > 0 { 

      self.tableview.reloadData() 
     } 
     } 
     } 
     } 



     func runRequestForMiami() { 

Alamofire.request(.GET, "http://android.goidx.com/condos/?tag=downtown miami&user_id=4").validate().responseJSON { response in 

    if let value = response.result.value { 
     let json = JSON(value) 

     if let resData = json.arrayObject { 

      self.miamiBuilBuildings = resData as! [[String:AnyObject]] 

      // print(resData) 
     } 

     if self.miamiBuilBuildings.count > 0 { 

      self.tableview.reloadData() 
     } 
     } 
     } 
     } 



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if let identifier = segue.identifier { 

     switch identifier { 


     case "showbuildings": 
      let buildingdDetailVC = segue.destinationViewController as! CtiesTableViewController 

      if let indexpath = self.tableview.{ 


      } 

     default: break 



     } 
     } 
     } 


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

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
    } 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    return city.count 
    } 


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Celllanding", forIndexPath: indexPath) as! LandingTableViewCell 


    let holder_city = city[indexPath.row] 
    let holder_subtitle = subtitle[indexPath.row] 
    cell.citynamelabel.text? = holder_city 
    cell.descriptionHolder.text? = holder_subtitle 


    cell.imageCity.image = UIImage(named: image[indexPath.row]) 

    return cell 
    } 



/* 
// Override to support conditional editing of the table view. 
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
    // Return false if you do not want the specified item to be editable. 
    return true 
} 
*/ 

/* 
// Override to support editing the table view. 
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { 
    if editingStyle == .Delete { 
     // Delete the row from the data source 
     tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 
    } else if editingStyle == .Insert { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
    }  
    } 
*/ 

/* 
// Override to support rearranging the table view. 
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) { 

     } 
*/ 

/* 
// Override to support conditional rearranging of the table view. 
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool { 
    // Return false if you do not want the item to be re-orderable. 
    return true 
    } 
*/ 

/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
    } 
*/ 


override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    return 300.0 
    } 



    } 









    //Second tableview as a detail tableview 





    import UIKit 
    import Alamofire 
    import SwiftyJSON 

    class CtiesTableViewController: UITableViewController { 

@IBOutlet var tableview: UITableView! 


var images = [String]() 



    // Strings to store the data passed from the first tableview 
    var datareceiver1: String = "" 
    var datareceiver2: String = "" 
    var datareceiver3: String = "" 
    var datareceiver4: String = "" 
    var datareceiver5: String = "" 

    // array of dictionary to append the data received from first tableview 
    var Data1 = [[String:AnyObject]]() //Array of dictionary 
    var Data2 = [[String:AnyObject]]() //Array of dictionary 
    var Data3 = [[String:AnyObject]]() //Array of dictionary 
    var Data4 = [[String:AnyObject]]() //Array of dictionary 
    var Data5 = [[String:AnyObject]]() //Array of dictionary 
    var Data6 = [[String:AnyObject]]() //Array of dictionary 


func refresh(sender:AnyObject) 
{ 
    // Updating your data here... 

    self.tableView.reloadData() 
    self.refreshControl?.endRefreshing() 
} 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    // Uncomment the following line to preserve selection between presentations 
    // self.clearsSelectionOnViewWillAppear = false 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller. 

    self.refreshControl?.addTarget(self, action: "refresh:", forControlEvents: UIControlEvents.ValueChanged) 
    refreshControl!.backgroundColor = UIColor.grayColor() 
    refreshControl!.tintColor = UIColor.whiteColor() 

    // self.navigationItem.rightBarButtonItem = self.editButtonItem() 



     } 


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

     } 



    override func viewWillAppear(animated: Bool) { 


    super.viewWillAppear(animated) 

    tableview.showsHorizontalScrollIndicator = false 
    tableview.showsVerticalScrollIndicator = false 
    tableview.dataSource = self 
    tableview.delegate = self 


    self.tableview.rowHeight = 300.0 



    } 


// MARK: - Table view data source 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    // #warning Incomplete implementation, return the number of sections 
    return 1 
} 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    //print(uniq(data).count) 
    //return (uniq(data1).count) 

    return Data.count 

} 


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! PlacesTableViewCell 

    // Configure the cell... 




    return cell 
    } 


    } 

回答

1

聲明一個變量以保持在第一TableViewController

var arrayToBePassed: YourType? 
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    switch indexPath.row { 
    case 0: 
     arrayToBePassed = yourArray 

    default: 
     break 
    } 
    self.performSegueWithIdentifier("showbuildings", sender: self) 
} 

這要通過的陣列和overrideUITableViewDelegatedidSelectRowAtIndexPath方法將調用prepareForSegue方法。現在我宣佈你提到的數組類型的var,在第二UITableViewController和修改prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    switch identifier { 
     let buildingdDetailVC = segue.destinationViewController as! CtiesTableViewController 
     buildingdDetailVC.arrayInSecondTVC = arrayToBePassed 

    default: 
     break 
    } 
} 

PS:請確認你是不是overridingdidDeselectRowAtIndexPath,因爲它是常犯的錯誤。

+0

當你說你的數組。你在第二個視圖中討論數組嗎? –

+0

'yourArray'是保存您在第一個'UITableViewController'中選擇的行的細節的數組。在'didSelectRowAtIndexPath'中,它被複制到另一個相同類型的公共數組中,該數組是'arrayToBePassed'。 'arrayInSecondTVC'是要在第二個'TableViewController'類中聲明的數組,並且在第一個控制器的'prepareForSegue'中,您將使用所選行的詳細信息填充此數組。 – Mathews

+0

它的工作!那是一個非常出色的創意伴侶 –

相關問題