Swift:选择搜索结果后返回tableview
Posted
技术标签:
【中文标题】Swift:选择搜索结果后返回tableview【英文标题】:Swift: return to tableview after selecting a search result 【发布时间】:2015-04-01 13:38:20 【问题描述】:我已经成功实现了一个搜索功能。我希望能够搜索我的列表,选择列表中的一个项目,然后在项目 保持 被选中时返回到主表视图。我该怎么做?
这是在搜索栏中没有任何选择或字符的表格视图。项目没有详细视图。项目确实有更多可以检索的信息,例如网址。当用户按下左上角的“邮件”按钮时,必须稍后检索此数据。
这是包含搜索结果的列表。单元格的灰色突出显示表示该单元格已被选中。我现在如何返回主表视图,同时保持选择?我只看到右上角的取消按钮、搜索栏顶部中间的十字按钮以及键盘右下角的“搜索”按钮。在存储选择时,没有人会带您回到主 tableview。
根据建议的答案,我能够使用以下函数存储行的索引路径:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
let rowToSelect = indexPath
println(rowToSelect)
selectedCellTitle = selectedCell?.textLabel?.text ?? ""
println("The stored cell is called \(selectedCellTitle)")
但是,我没有成功重新选择主表视图中的行。我的代码如下。看起来常量“rowToSelect”没有被转移到另一个函数(参见最后一行代码之前的那个)。我该如何解决?
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = self.tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell
if tableView == self.searchDisplayController!.searchResultsTableView
cell.textLabel?.text = filteredPublications[indexPath.row].valueForKey("fullTitle") as? String
cell.detailTextLabel?.text = filteredPublications[indexPath.row].valueForKey("journal") as? String
else
cell.textLabel?.text = publications[indexPath.row].valueForKey("fullTitle") as? String
cell.detailTextLabel?.text = publications[indexPath.row].valueForKey("journal") as? String
self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: .Top)
return cell
【问题讨论】:
当你放入视图时向你的单元格添加一个标签,当你选择单元格时存储标签,遍历你的表格视图的子视图测试标签是否是存储的标签,使选择正确的单元格 在这种方法中,用户将使用什么按钮从搜索结果列表转到完整列表? 我已经编辑了我的反应,我希望这能为你澄清一些事情 你解决过这个问题吗? 【参考方案1】:UITableView 委托有一个函数tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath
。 This function get’s called when a row is selected.
如果你监听这个函数并保存选择的 indexPath,你可以使用selectRowAtIndexPath
在你的主视图中(重新)选择它。
实现此函数以侦听 tableView 中所做的任何选择
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
//get back to your filled UITableView
//Save "indexPath" to a variable
当您回到拥有 UITableView 的视图控制器时
self.tlbView.selectRowAtIndexPath(“above declared variable”, animated: true, scrollPosition: .Top)
【讨论】:
米洛,结果很有希望!我可以在搜索表视图中为所选行存储不同的值(例如,文本作为字符串,或 indexPath 作为 NSIndexPath)。但是,我还不能在主表视图中重新选择行。我认为这是因为我需要将“声明的变量”带到一个新函数中,这似乎不起作用。上例中的代码。你会如何解决这个问题? 您提供的代码很少(不准确:P),所以我需要猜测一下。当你回到你的表视图self.tlbView.selectRowAtIndexPath(selected, animated: true, scrollPosition: .Top)
时,你可以在任何类var selected = o
之外声明一个变量而不是selected = messageTableView.indexPathsForSelectedRows()?.first as! NSIndexPath
。
哈哈,码起来了!查看您的回复,我已将 rowToSelect 声明为 var rowToSelect = NSIndexPath(forRow: 0, inSection: 0) 在函数之外(但在 PublicationTableViewController 类中)。但是,一旦我在搜索视图中选择了一行,rowToSelect 的新值似乎并没有被继承。我想我误解了如何结转变量。
首先当你搜索tableview时,它会根据新创建的搜索tableview索引路径给出indexpath,而不是原来的tableview indexpath。
这不会像 Swayambhu 建议的那样工作。搜索到的行的索引路径不会和表格视图的原始索引路径相同。【参考方案2】:
如果您能够在 tableViewController 中保存 Cell 的索引,则可以在返回 tableView 后立即使用self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: .Top)
。即使您滚动表格,这也会使单元格保持灰色,就像您的图片一样。
【讨论】:
在这种方法中,用户将使用什么按钮从搜索结果列表转到完整列表? 只要搜索栏为空,如果表格视图跳回正常状态(所有条目),他不需要额外的按钮。我会使用委托,然后绑定optional func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
请参见此处:developer.apple.com/library/prerelease/ios/documentation/UIKit/…:以上是关于Swift:选择搜索结果后返回tableview的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift4 中取消选中 TableView 所有 TableView 选择
选择一个 TableView Cell 后,将数据传回 Swift 中的前一个 View Controller