根据在 swift 中选择的第一个表格行更改第二个表格内容

Posted

技术标签:

【中文标题】根据在 swift 中选择的第一个表格行更改第二个表格内容【英文标题】:Change second table content based on first table row selected in swift 【发布时间】:2015-05-05 01:54:17 【问题描述】:

我有一个包含两个表(propertyTypeList 和 propertyDetailList)和一个文本视图(propertyDetailView)的视图

我要做的是让 propertyDetailList 根据 propertyTypeList 中的选择填充一个数组,然后让 propertyDetailView 根据 propertyDetailList 中的选择填充。

我可以使用底部函数和 indexPath.row 查看当前选定的行,但无法在上面的函数中调用该调用。

这是我的代码:

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.

*/


如何从第二个 tableView Func 访问 indexPath.row?

【问题讨论】:

【参考方案1】:

关于您对@Duncan C 的回答@BlueRad 的评论,只需在 if 语句中重新加载您的第二个 tableView 数据

propertyDetailList.reloadData()

这样就可以了。

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
    if tableView == propertyTypeList 
        self.propertyDetailList.reloadData()
    

【讨论】:

你能解释一下它是如何工作的,因为它不适合我 @MananRami 如果这不起作用,那么您的情况可能与此不同。 我理解你的逻辑,它可以在我的代码中进行一些更改,谢谢好友【参考方案2】:

您的问题中似乎有错字。你说:

我有一个包含两个表的视图(propertyTypeList 和 propertyDetailList) 和一个文本视图(propertyDetailView)

我想要做的是让 propertyDetailList 填充一个 数组基于在 propertyDetailList 中所做的选择,然后有 propertyDetailView 根据中的选择填充 属性详细信息列表。

你的意思是说“我想要做的是让 propertyDetailList 根据在 propertyTypeList 中所做的选择填充一个数组......”这样更有意义。

所以你基本上有一个主从设置,其中 propertyTypeList 是主表视图,propertyDetailList 是详细表视图。

我假设两个表视图的数据源和委托都指向同一个视图控制器。

您需要做的是编写您的tableView:didSelectRowAtIndexPath:方法来检查tableView 参数。当用户在任一 tableView 中选择一行时,将调用该方法,但 tableView 参数将让您确定所选单元格属于哪个表格视图。

所以你的代码可能看起来像这样:

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.
  

【讨论】:

您的错字完全正确,谢谢。 (更正)我正在使用您提到的确切函数(在我上面的代码中),但我无法从该函数中获取选定的行来修改第二个 tableview 函数中的输出。我将如何从您提到的函数中获取 indexPath.row 到另一个函数中?

以上是关于根据在 swift 中选择的第一个表格行更改第二个表格内容的主要内容,如果未能解决你的问题,请参考以下文章

Swift 5. 从第二个表格视图单元格(第二个 indexpath.row )显示数组

Swift - TableView的协议代理无法正常工作 - 以模态呈现

根据第一个下拉列表更改第二个下拉列表,并使用 php 和数组更改第二个下拉列表的第三个下拉列表 [关闭]

根据上一个 Flutter 的选择更改下拉按钮的选择

根据第一个更改第二个日期选择器的 minDate

是否可以根据从 android 中的第一个选择中选择的特定值设置第二个选择的选定值?