Ios 如何通过Swift中的Segue将数据传递到下一个视图?
我在斯威夫特发展 下图是我的故事板 有一个主视图。按下扫描(右栏按钮项)时,主视图将把视图更改为扫描视图,并将数据传递到Ios 如何通过Swift中的Segue将数据传递到下一个视图?,ios,swift,uiviewcontroller,uinavigationcontroller,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,我在斯威夫特发展 下图是我的故事板 有一个主视图。按下扫描(右栏按钮项)时,主视图将把视图更改为扫描视图,并将数据传递到扫描视图 self.performSegueWithIdentifier("ScanView", sender: self) 而情节提要序列的标识符是ScanView 我使用以下代码将数据从Main传递到Scan 按下扫描(右栏按钮项)时 self.performSegueWithIdentifier("ScanView", sender: self) 并将数据传递到下一
扫描视图
self.performSegueWithIdentifier("ScanView", sender: self)
而情节提要序列的标识符是ScanView
我使用以下代码将数据从Main传递到Scan
按下扫描(右栏按钮项)时
self.performSegueWithIdentifier("ScanView", sender: self)
并将数据传递到下一个视图
//prepare jumping to next page
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if (segue.identifier=="ScanView"){
let desViewController = segue.destinationViewController as! ScanViewController
desViewController.myCenteralManager = myCenteralManager
}
}
它将在让desViewController=segue.destinationViewController为时崩溃!ScanViewController
并显示如下错误:
Could not cast value of type 'UINavigationController' (0x3960e0a8) to 'BLEConnect.ViewController' (0x5514c).
有人能教我如何解决这个问题吗?提前感谢。错误消息非常清楚,您尝试将segue.destinationViewController设置为
ScanViewController
,而实际上它是一个导航控制器。您需要先获取导航控制器,然后使用其topViewController
属性获取目标视图控制器
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
if (segue.identifier=="ScanView") {
if let navController: UINavigationController = segue.destinationViewController as? UINavigationController {
if let desViewController: ScanViewController = navController.topViewController as? ScanViewController {
desViewController.myCenteralManager = myCenteralManager
}
}
}
}
您的
NavigationController
在Interface Builder中(可能)位于错误的位置。现在,当您继续时,您将转到UINavigationController
,而不是您所期望的ScanViewController
。这就是强制转换失败的原因,因为您试图强制UINavigationController
成为ScanViewController
要解决此问题,您应该将MainViewController
放在UINavigationController
中,然后直接转到ScanViewController
准确显示了如何使用界面生成器、UINavigationController和segues来实现您的目标。您可以将导航控制器嵌入到主视图控制器中,并像上面所做的那样执行segue。这应该可以解决问题
显示错误消息是因为您使用类型casted导航控制器而不是扫描视图控制器,错误消息非常清楚;您试图强制强制将UINaigationController转换为ScanViewController。您可以将主视图控制器嵌入导航控制器而不是扫描视图,否则需要从导航控制器的ViewController属性访问扫描视图控制器。我也不喜欢从扫描视图回到主视图的那个序列的外观。您应该使用展开序列,或者如果您将主视图控制器嵌入导航控制器中,则默认情况下“后退”按钮将在那里