2016-04-05 36 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

它的工作!那是一个非常出色的创意伴侣 –

相关问题