Change second table content based on first table row selected in swift

老子叫甜甜 提交于 2020-01-06 21:12:26

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!