【问题标题】:How do I get my TableView selection to open my modal view?如何让我的 TableView 选择打开我的模式视图?
【发布时间】:2016-06-16 22:15:12
【问题描述】:

我创建了一个TableView,其中包含一个TableViewCell

我希望TableView 中的单元格在单独的ViewController 中打开。

我的故事板如下所示:

我的TableViewController 有这个:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ShowVerse" {
        let pageDetailViewController = segue.destinationViewController as! PageViewController

        // Get the cell that generated this segue.
        if let selectedPageCell = sender as? PageTableViewCell {
            let indexPath = tableView.indexPathForCell(selectedPageCell)!
            let selectedPage = pages[indexPath.row]
            pageDetailViewController.page = selectedPage
        }
    }
}

在我的 PageViewController.swift 我有这个:

var page: Page?

override func viewDidLoad() {
    super.viewDidLoad()

    if let page = page {
        chapter.text = String(page.chapter)
        verse.text = String(page.verse)
    }
}

我没有收到任何错误。但敲击细胞并没有什么作用。我可能会错过什么?

【问题讨论】:

  • 将segue从表格单元连接到detailvc而不是从tablevc到detailvc
  • @TejasArdeshna 我认为这就是我所做的。我ctrl+从tableViewCell拖到DetailViewCell就产生了上图

标签: ios swift model-view-controller


【解决方案1】:

Swift

didSelectRowAtIndexPath 中的代码

self.performSegueWithIdentifier("homeSegue", sender: self)


在切换到下一个视图控制器之前,如果你想将值传递给下一个视图控制器

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "homeSegue")
    {
        var homeController = segue.destinationViewController as? ViewController
        homeController.name = "valeu"
    }
}



Objective-C
didSelectRowAtIndexPath 中的代码

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


在切换到下一个视图控制器之前,如果你想将值传递给下一个视图控制器

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([segue.identifier isEqualToString:@"ShowVerse"]) {
    HomeViewController *controller = segue.destinationViewController;
    controller.propertyName = @"value";
}
}

【讨论】:

  • 这么快吗?我如何将价值传递给我的下一个控制器,在技术上会有什么不同?
  • 用于objective-C。没有问题,我也可以快速发布。
  • 啊,你的回答非常有帮助。但不幸的是,它为homeController.name = "value" 行返回fatal error: unexpectedly found nil while unwrapping an Optional value。但是这种响应也不会像我的那样动态,因为我想将动态变量从我的 Cell 转移到它
  • 嘿Trip,实际上“名称”取代了您的下一个/目的地视图控制器中确实存在的属性。
【解决方案2】:

试试这个:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    performSegueWithIdentifier("ShowVerse", sender: self)
}

【讨论】:

  • 然后我会在这个方法中传递我的所有变量而不是在prepareForSegue 中传递吗?
  • 不,不幸的是你应该坚持你的方法
  • 您也可以直接从情节提要中完成。从连接检查器中选择 tableviewcell->触发的 segues 从选择拖动到您的视图控制器。 :)
猜你喜欢
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 2018-05-10
  • 2023-04-03
相关资源
最近更新 更多