问题
I have a view with two tables (propertyTypeList & propertyDetailList) and a text view (propertyDetailView)
What I'm trying to do is have propertyDetailList populate with an array based upon the selection made in propertyTypeList, then have propertyDetailView populate based upon the selection in propertyDetailList.
I can view the currently selected row using my bottom function and indexPath.row, but I can't get that call to work in the function above.
here is my code:
class NewProjectView: UIViewController {
@IBOutlet weak var propertyTypeList: UITableView!
@IBOutlet weak var propertyDetailList: UITableView!
@IBOutlet weak var propertyDetailView: UITextView!
var testarray = ["test1", "test2"]
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int
{
if tableView == propertyTypeList {
return projectSources.count;
}
else {
return testarray.count
}
}
func tableView(tableView: UITableView!,
cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
let cell:UITableViewCell = UITableViewCell(style:UITableViewCellStyle.Default, reuseIdentifier:"Cell")
if tableView == propertyTypeList {
cell.textLabel?.text = projectSources[indexPath.row]
if indexPath.row == 0 {
println("Row 0")
}
else
{
println("Not Row 0")
}
return cell
}
else
{
cell.textLabel?.text = testarray[indexPath.row]
return cell
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
println(indexPath.row)
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// 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.
}
*/
}
How do I access indexPath.row from the second tableView Func?
回答1:
It looks like there is a typo in your question. You said:
I have a view with two tables (propertyTypeList & propertyDetailList) and a text view (propertyDetailView)
What I'm trying to do is have propertyDetailList populate with an array based upon the selection made in propertyDetailList, then have propertyDetailView populate based upon the selection in propertyDetailList.
Did you mean to say "What I'm trying to do is have propertyDetailList populate with an array based upon the selection made in propertyTypeList..." That would make more sense.
So you essentially have a master-detail setup, where propertyTypeList is a master table view and propertyDetailList is the detail table view.
I'm assuming that both table views have their data source and delegate pointed to the same view controller.
What you need to do is write your tableView:didSelectRowAtIndexPath:
method to check the tableView parameter. That method will be called when the user selects a row in either tableView, but the tableView parameter will let you figure out which table view the selected cell belongs to.
So your code might look something like this:
func tableView(
tableView: UITableView,
didSelectRowAtIndexPath indexPath: NSIndexPath)
{
if (tableView == propertyTypeList)
{
//Switch the selected item in the detail list
}
else
{
//do whatever is appropriate for selecting a detail cell.
}
}
回答2:
regarding your comment on @Duncan C's answer @BlueRad just reload your second tableView data in if statement
propertyDetailList.reloadData()
That will do the trick
来源:https://stackoverflow.com/questions/30043015/change-second-table-content-based-on-first-table-row-selected-in-swift