2015-04-01 66 views
4

我已经成功实现了搜索功能。我希望能够搜索我的列表,选择列表中的一个项目,然后返回到主表格视图,而项目仍然选择。我该怎么做呢?Swift:选择搜索结果后返回tableview

这是没有任何选择或字符键入到搜索栏的tableview。项目没有详细视图。项目确实具有可以检索的更多信息,例如,网址。稍后当用户按下左上方的“邮件”按钮时,必须检索此数据。 This is the tableview populated with a subset of the full list (pulled from a test database)

这是带搜索结果的列表。该单元格的灰色突出显示该单元格已被选中。现在如何返回到主桌面视图,同时保持选择?我只看到右上角的取消按钮,搜索栏顶部中间的交叉按钮以及键盘右下角的“搜索”按钮。在存储选择时,没有将您带回主表格视图。 This is the page with search results. How do I return to the 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)") 
} 

不过,我还没有成功地在主要的tableview重新选择行。我的代码如下。它看起来像常量“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 
} 
+0

视图控制器标签添加到您的时候您放入视图中,选择单元格时存储标签,循环浏览表格视图的子视图,如果标签是存储的标签,则选择正确的单元格 – milo526 2015-04-01 13:46:24

+0

在此方法中,用户使用哪个按钮从搜索结果列表到fu我会列出吗? – 2015-04-01 21:36:05

+0

我编辑了我的反应,我希望这能为你澄清一些问题 – milo526 2015-04-02 13:42:17

回答

0

UITableView代表有一个功能tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath。这个函数get在被选中时被调用。
如果您收听此功能并保存选定的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) 
+0

Milo,结果很有希望!我可以在搜索表格视图中为选定的行存储不同的值(例如文本为字符串,或indexPath为NSIndexPath)。但是,我还无法重新选择主表视图中的行。我认为这是因为我需要将“声明的变量”带到一个新的函数中,而这似乎不起作用。上例中的代码。你会如何解决这个问题? – 2015-04-04 19:56:54

+0

你已经提供了很少的(非精确的:P)代码,所以我需要猜测一下。你可以在'var selected = o'类之外声明一个变量,而不是'selected = messageTableView.indexPathsForSelectedRows()?. NSIndexPath'当你回到你的tableview'self.tlbView.selectRowAtIndexPath(选中,动画:true,scrollPosition:.Top)' – milo526 2015-04-04 20:06:40

+0

哈哈,代码已经启动!看看你的回复,我已经声明rowToSelect为var rowToSelect = NSIndexPath(forRow:0,inSection:0)在函数之外(但在PublicationTableViewController类中)。然而,一旦我在搜索视图中选择一行,rowToSelect的新值似乎不会被结转。我想我误解了如何继承变量。 – 2015-04-04 20:09:47

0

如果你能够拿在tableViewController细胞的指数,你可以只要你回到你的tableView使用self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: .Top)。即使您滚动表格,这也会使单元格像您的图片一样变灰。

+0

在这种方法中,用户使用哪个按钮从搜索结果列表转到完整列表? – 2015-04-01 21:36:52

+0

只要搜索栏为空,他不需要额外的按钮,如果tableview跳回到正常状态(所有entrys)。我将使用委托,然后绑定'可选的func searchBar(_ searchBar:UISearchBar, textDidChange searchText:String)'请参阅:https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/ UISearchBarDelegate_Protocol/index.html#// apple_ref/occ/intfm/UISearchBarDelegate/searchBar:textDidChange: – 2015-04-02 06:45:20