【问题标题】:Segue from STATIC tableviewcell to new tableviewcontroller从 STATIC tableviewcell 转移到新的 tableviewcontroller
【发布时间】:2017-08-31 07:57:10
【问题描述】:

这对我来说似乎很补救,但我遇到了问题。我只是想在点击某个静态单元格时转换到另一个 tableviewcontroller。

我从单元格中控制单击到新的 tableviewcontroller,这没有问题——segue 已创建。但是当我运行应用程序时,单击单元格时没有任何反应。有人弹出同样的问题吗?

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard : UIStoryboard = UIStoryboard (name: "groups", bundle: nil)
    let groupsVC = storyboard.instantiateViewController(withIdentifier: "groups") as! GroupsViewController
    if indexPath.section == 1 && indexPath.row == 0 {
    self.navigationController?.pushViewController(groupsVC, animated: true)
    }

【问题讨论】:

  • 你能展示你尝试过的代码吗
  • 我没有要显示的。我的印象是它就像一个 uibutton 一样工作,您可以从按钮拖动到情节提要中的新视图控制器。

标签: ios swift uitableview


【解决方案1】:

如果您在 UITableViewController 而不是在 UIViewController 中创建静态单元格并在其上添加了 UITableView,则可以在 UIStoryboard 中对另一个控制器进行 segue。

之后,如果您使用 push segue,请确保 UITableViewController 嵌入在 UINavigationController 中。

【讨论】:

  • 这是我最初尝试过的,但没有运气......我们没有嵌入式导航控制器。我想知道它是否不起作用,因为这个特定的 tableview 控制器不是我的初始控制器?编辑——我刚刚意识到你说在 tableview 控制器顶部有一个 tableview。这似乎不太干净......我将首先尝试@Sneak 的解决方案。谢谢。
  • 上面的这个方法不需要代码就可以按照你的要求工作,我没有说要在 viewcontroller 上使用 tableview,我说的正好相反。请在下结论之前仔细阅读。
  • 感谢您抽出宝贵时间写下如此可爱的回复。不掌握指令不等于“草草下结论”。 “在 UITableViewController 中……上面有 UITableView”听起来很像“在 tableviewcontroller 上放一个 tableview”,但也许我需要更有经验。再次感谢您的帮助。
【解决方案2】:

您需要在 tableViewController 中实现委托方法:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 // Handle your tap to the cell here

    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    YourViewControllerToPush *vc= [storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerStoryboardIdentifier"];

[self.navigationController pushViewController:vc animated:YES];
// Or to present it [self presentViewController:vc animated:YES completion:nil];

}

编辑: 您还可以使用 segue 标识符方法,as described here: 但是,无论如何,您都需要在上述委托中调用该操作。

[self performSegueWithIdentifier:@"MySegue" sender:sender];

斯威夫特:

Push viewcontroller

didSelectRowAtIndexPath

【讨论】:

  • 所以这只能以编程方式完成吗?我认为这就像故事板,一个用于转到新视图控制器的按钮。
  • 是的。 tableViewCell 不是按钮。正如我所写,您需要处理委托方法中的选择。您的选项 1:如果您想以编程方式推送 viewController,请使用上面的第一种方法。但是您需要为 viewController 设置一个 storyBoardIdentifier。按视图控制器,在右侧可以设置情节提要标识符。选项 2:将视图控制器与 segue 链接,在情节提要中使用标识符命名 segue,并使用第二个选项“performSegue ...”,我更喜欢第一种方法更简洁。如果这能解决您的问题,请接受答案。
  • @ChrisK 您还可以向单元格添加按钮,并向单元格按钮添加操作。但这一样干净,除非您想自定义按钮设计,否则完全可以。但是,您仍然需要将操作添加到按钮。
  • 我也更喜欢更清洁的方法。我在识别您的部分代码时遇到了一些麻烦。我正在使用 Swift,虽然这些方法是可识别的,但有些字符不是(即。@、*)。无论如何,我都会试一试,如果我成功,请务必将其标记为已回答。谢谢。
  • @Sneak...我想通了。我在顶部有一些代码,当在其中一个单元格的文本字段外按下时会关闭键盘。那一定是压倒了单元格的可选择性。谢谢您的帮助。已回答。
【解决方案3】:

我遵循 Aragunz 的解决方案,该解决方案最初不起作用......几个小时后,我发现我在 TableView 上设置了一个 tapGestureRecognizer 以允许它在敲击键盘时关闭它。

这与静态单元格上的 segue 设置冲突。我评论了tapGesture相关代码,一切正常

//        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingsTableViewController.hideKeyboard))
//        tapGesture.cancelsTouchesInView = true
//        settingsTableView.addGestureRecognizer(tapGesture)

我必须找到另一种解决方案来关闭我的键盘:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多