为啥我的 UITableView 不执行 show segue,只显示模态

Posted

技术标签:

【中文标题】为啥我的 UITableView 不执行 show segue,只显示模态【英文标题】:Why does my UITableView not perform show segue, only presents modally为什么我的 UITableView 不执行 show segue,只显示模态 【发布时间】:2015-05-24 09:19:33 【问题描述】:

大家好,我的应用程序一直存在问题,来自 UITableView 的所有 segues 仅以“当前模式”(从底部向上)而不是显示(从右侧显示)呈现

相关的VC方法有

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 14



override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 


    if segue.identifier == "selectionSegue" 

    let tabController = segue.destinationViewController as UITabBarController

        if let newController = tabController.viewControllers![0] as? SelectedItemViewController 
            if let row = tableView.indexPathForSelectedRow()?.row
                newController.selectedItem = pList[row]
            
         
    



func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
    itemViewItem = testList[indexPath.row%testList.count]
// where testList is a preconfigured string array of five items
    tableView.deselectRowAtIndexPath(indexPath, animated: true)


在故事板中:

TableView 是具有 searchBar 和 tableView 控制器的视图控制器的子视图。 TableVC 有一个原型单元格,该单元格具有通过从单元格内部拖动到目标 VC 形成的 segue(显示)。 viewController 被配置为 tableViewDataSource 和 Delegate 并且还有一个用于 tableView childView 的 IBOutlet。

每一行都显示得很好,并且 tableView 按预期显示(cellForRow.. 和所有其他方法都按预期工作)但是目标视图控制器(标签栏视图控制器的第一个标签中的视图控制器)总是到达从底部。

将 tabBarVC 作为目标 V​​C 不是问题,因为即使我使用通用 VC 作为目标也会出现同样的问题。

帮我弄清楚为什么我无法通过“显示”进行演示。

【问题讨论】:

【参考方案1】:

您的 ViewController 必须在 UINavigationController 中才能作为推送工作。为此,请使用 TableView 选择您的 ViewController,然后从顶部的菜单中选择 Editor->Embed In->Navigation Controller

正如您所说,UITabViewController 不是您的问题,您不应该继续使用 UITabBarController。它们旨在成为应用程序的根 viewController。组合UINavigationControllers 和UITabControllers 的正确方法是将UITabBarController 放在根目录,然后每个选项卡都有自己的UINavigationController

【讨论】:

非常感谢,我知道这会很简单。我也没有要升级的排骨,但同样感谢。此外,既然我已经嵌入了 VC,我得到了一个“双重搜索”,但最终还是在同一个 VC,知道为什么吗? 描述双重转场是什么样子的。 我已经对其进行了排序,它是到目标 VC 的一个转场,紧接着是另一个从目标 VC 到它自己的转场(相同的目标 VC),两者都作为 show segues。发生的情况是,用于触发 segue 的按钮仍然具有 performSegueWithIdentifier 方法作为其 IBAction,但是将 segue 直接从其 UIButton 图标拖到目标 vc,因此当按下它时,它执行了 segue,然后调用了“performSegueWithIdentifier” ..

以上是关于为啥我的 UITableView 不执行 show segue,只显示模态的主要内容,如果未能解决你的问题,请参考以下文章