2017-08-07 7 views
0

MasterViewのテーブルセルがXibセルであるマスター詳細ビューアプリケーションがあります。私はまた、以下に示すようにDetailViewControllerで2 TableViewsが並んで置かれてい:MasterViewのTableViewCell(Xib Cell)からDetailViewのTableViewにナビゲートする方法

Master and Detail Views

今私の問題は、私はマスターのTableViewCellをクリックしていたとき、私はDetailViewのテーブルビューを移入することができませんです。 splitviewcontrollerとして座っているように、私は

protocol MasterSelectionDelegate: class { 
    func itemSelected(_ item: AnyObject) 
} 

次に、以下に示すmasterviewcontrollerにプロトコルを追加した

class MasterViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

var devarlViewController: DetailViewController? = nil 
var objects = [Any]() 
var statesList = ["AL", "GA", "AK", "AR", "AZ", "CA", "CO", "CT", "CO"] 

@IBOutlet weak var tableView: UITableView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "cell") 
    // Do any additional setup after loading the view, typically from a nib. 
    } 


// MARK: - Table View 

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return statesList.count 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) 
    cell.textLabel!.text = statesList[indexPath.row] 
    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    DetailViewController.sharedDetail.selectedState = (self.tableView(tableView, cellForRowAt: indexPath).textLabel?.text)! 
    DetailViewController.sharedDetail.selectedCity = "" 
} 

}

class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 
static let sharedDetail = DetailViewController() 
@IBOutlet weak var CitiesTable: UITableView! 

@IBOutlet weak var PlacesTable: UITableView! 
var selectedState: String = ""{ 
    didSet{ 
     CitiesTable.reloadData() 
    } 
} 
var selectedCity: String = "" 
var citiesStates: [String:[String]] = [ "AL": ["Auburn", "Montgomery", "Birmingham"] 

] 
var placesCities: [String:[String]] = [ "Auburn": ["Dominos", "Pizzahut", "McDonalds"], 
             "Birmingham": ["iHop", "Coldstone", "WaffleHouse"] 
] 
var cities: [String] = [] 
var places: [String] = [] 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

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

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if(tableView == CitiesTable) 
    { 
     if(selectedState != "") 
     { 
      cities = citiesStates[selectedState]! 
      return cities.count 
     } 
    } 
    else 
    { 
     if(selectedCity != "") 
     { 
      places = placesCities[selectedCity]! 
      return places.count 
     } 
    } 
    return 0 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    if(tableView == CitiesTable) 
    { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "citiesCell", for: indexPath) 
     cell.textLabel?.text = cities[indexPath.row] 
     return cell 
    } 
    else 
    { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "placesCell", for: indexPath) 
     cell.textLabel?.text = cities[indexPath.row] 
     return cell 
    } 
} 

}

答えて

0

:私は以下の私のコードを貼り付けていrootviewcontroller。 アプリデリゲート内またはスプリットビューコントローラの作成中。私はこのことを求めているマスターのViewControllerのdidSelectRowAtIndexPathで

ライン以下
masterViewController.delegate = detailViewController 

を追加しました:

`override func tableView(tableView: UITableView, 
didSelectRowAtIndexPath indexPath: NSIndexPath) { 
let selectedItem = self.arrString[indexPath.row] 
self.delegate?.itemSelected(selectedItem) 
}` 

最後にあなたが詳細ビューコントローラにデリゲートに

func itemSelected(_ item: AnyObject) { itemSelected = item as? Array<String> tableview.reloadData() }

それを実装する必要があります
関連する問題