从一个视图控制器移动到另一个视图控制器无法快速进行

时间:2018-07-04 05:41:48

标签: ios swift uicollectionviewcell viewcontroller

找到我的代码,我检查了所有内容是否正确,并尝试了此处可用的所有可能解决方案,但没有使用。相同的代码在另一个视图控制器中对我有用,可以移动到另一个视图控制器。

 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    // handle tap events
    print("You selected cell #\(indexPath.item)!")
    let nextViewControllerObj = self.storyboard?.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
    self.navigationController?.pushViewController(nextViewControllerObj, animated: true)

}

1 个答案:

答案 0 :(得分:2)

有以下几种可能会阻止将一个视图控制器移动到另一个视图控制器。

  

您正在使用self.storyboard?(可选),因此self.storyboard可能是nil,并且您将无法继续使用视图控制器。

  • 因此解决方案是,您需要确保self.storyboard不是nil。例如。

    guard let mainStoryboard = self.storyboard {
      print("Storyboard is nil.")
      return
    }
    
    //here you can use like...
    let nextViewControllerObj = mainStoryboard.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
    self.navigationController?.pushViewController(nextViewControllerObj, animated: true)
    
  

您正在使用self.navigationController?(可选)将视图控制器推入导航堆栈。在这种情况下,导航栏可能为nil,因此您可能拥有视图控制器,但没有导航项可以插入。

  • 解决方案是您需要确保有导航控制器来推送视图控制器。例如。

    guard let navController = self.navigationController {
      print("self.navigationController is nil.")
      return
    }
    
    //here you can use like...
    let nextViewControllerObj = self.storyboard?.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
    navController.pushViewController(nextViewControllerObj, animated: true)
    

因此,通过结合使用两种解决方案,您可以像...一样使用

    guard let mainStoryboard = self.storyboard {
      print("self.storyboard is nil.")
      return
    }

    guard let navController = self.navigationController {
      print("self.navigationController is nil.")
      return
    }

   let nextViewControllerObj = mainStoryboard.instantiateViewController(withIdentifier: "symptomsView") as! SymptomsViewController
   navController.pushViewController(nextViewControllerObj, animated: true)

因此,如果该对象中的任何一个为nil,您将在控制台中收到一条消息。

希望这对您有帮助:)