根据在 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的协议代理无法正常工作 - 以模态呈现