以编程方式模拟Swift中UITableViewController中的选择

时间:2014-07-16 17:30:06

标签: ios uitableview swift

对不起任何代码行的问题表示歉意。如果可能的话,我需要建议如何继续。

用Swift语言。

我们假设有一个带有两个控制器的应用程序 - UITableViewController,其中嵌入了NavigationController作为主要内容。当您在表格中选择一行时,请打开UIViewController,其中会显示有关所选值的详细信息。

是否可以这样做?应用程序启动时,以编程方式模拟表中第一行的选择,并立即显示UIViewController,其中包含有关所选值的详细信息。从此控制器可以通过UITableViewController返回NavigationController

我再次道歉并提前感谢你!

2 个答案:

答案 0 :(得分:37)

是的,您可以在swift中执行此操作。只需像往常一样加载tableViewController。您只需致电

在Swift中

    let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0);  //slecting 0th row with 0th section
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition: UITableViewScrollPosition.None);

selectRowAtIndexPath函数不会触发didSelectRowAtIndexPath:之类的委托方法,因此您必须手动触发此委托方法

   self.tableView(self.tableView, didSelectRowAtIndexPath: rowToSelect); //Manually trigger the row to select

或者如果您使用segue推送ViewControllers,则必须触发performSegueWithIdentifier

    self.performSegueWithIdentifier("yourSegueIdentifier", sender: self);

现在你可以在didSelectRowAtIndexpath中推送viewController。要选择第一部分中的第一行或执行whaterver,你已经用didSelectRowAtIndexpath: tableView写了

至于您的情况,只需按viewController选择第0个索引didSelectRowAtIndexPath

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!){

    if indexPath.row == 0 {

        self.navigationController.pushViewController(yourViewControllerToPush, animated: YES);
    }
    //handle other index or whatever according to your conditions
}

它将显示推送的视图控制器,如果您不想为视图控制器设置动画,只需将NO传递给pushViewController方法。

Back按钮,您将返回viewController

在您的情况下,只需在viewDidAppear

中写下此内容即可
if firstStart {
    firstStart = false
    let rowToSelect:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
    self.tableView.selectRowAtIndexPath(rowToSelect, animated: true, scrollPosition:UITableViewScrollPosition.None)
    self.performSegueWithIdentifier("showForecastSelectedCity", sender: self)
}

答案 1 :(得分:6)

您也可以通过访问tableView Delegate来强制执行此操作" didSelectRowAtIndex"解雇

//以编程方式选择要使用的行

self.tableView.selectRowAtIndexPath(indexPath, animated: true, scrollPosition: UITableViewScrollPosition.Top)

//以编程方式选择行不会触发" didSelectRowAtIndexPath"功能所以我们必须按照下面的手动强制点火

self.tableView.delegate!.tableView!(tableView, didSelectRowAtIndexPath: indexPath!)