我在设计故事板时遇到了问题。我目前在应用程序商店中有一个使用XIB文件设计的应用程序。我有一个放在UIViewController上的tableView - 而不是tableViewController - 为所选的每一行加载一个唯一的viewController。
我正在尝试将此概念转换为故事板。我做了以下
在故事板中放置一个UIViewController。
在UIViewController上放置一个UITableView,以便我可以自定义表格视图。
我尝试从UITableViewCell连接到多个ViewControllers,我不被允许。
我尝试从UIViewController创建多个segue - 我可以 - 但是当我点击单元格时,不会触发segues。我尝试使用didSelectRowAtIndexPath:和prepareForSegue:
由于这不起作用,我尝试使用UITableViewController创建一个项目,然后从UITableViewController创建多个segue。然后我命名每个segue并使用didSelectRowAtIndexPath:方法来测试所选单元格并调用performSegueWithIdentifier:这不起作用。当我点击单元格时,我会随机加载不正确的viewController。我复制了一些我的代码和下面几张屏幕截图。
我想知道我是否明显遗漏了一些明显的东西,还是我必须为这类项目恢复为xib格式?
override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
{
if indexPath.row == 0
{
println("Segue1")
self.performSegueWithIdentifier("Segue1", sender: self)
}
else if indexPath.row == 1
{
println("Segue2")
self.performSegueWithIdentifier("Segue2", sender: self)
}
else if indexPath.row == 2
{
println("Segue3")
self.performSegueWithIdentifier("Segue3", sender: self)
}
}
小心,
乔恩
答案 0 :(得分:5)
方法
取消选择项目时会调用override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath)
。
要在选择项目时调用方法,请将方法名称更改为override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
答案 1 :(得分:2)
我使用了艾伦评论的组合。最初我无法创建我需要的segues。我创建了一个导航控制器,它使用我自己的视图控制器来保存一个tableview。然后我为原型单元创建了相关的单元格,并将它们切换到静态单元格。我的数量有限,当时只有3。这允许我在故事板中创建适当视图的segue。然后我将细胞更换回原型细胞,并保持与细胞的连接。剩下的就是在表视图中创建关联的switch语句以转到正确的segue。只需确保使用代码中列出的标识符命名segue。
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath:NSIndexPath) {
//Add cases here to move to different segues
switch indexPath.row{
case 0: self.performSegueWithIdentifier("courses", sender: self);
break;
case 1: self.performSegueWithIdentifier("finals", sender: self);
break;
case 2: self.performSegueWithIdentifier("academic", sender: self);
break;
default:
break
}
}
答案 2 :(得分:1)
Swift 3 Code
那么,看看我用来根据单元格中设备类型的类型执行动态segue的代码。 :)希望它有所帮助。
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let device = Cache.DEVICELIST[indexPath.row]
let deviceType = device.type
switch deviceType {
case "camera":
self.performSegue(withIdentifier: "DashCellToCamera", sender: self)
case "gateway" :
self.performSegue(withIdentifier: "DashCellToGateway", sender: self)
case "tracker" :
self.performSegue(withIdentifier: "DashCellToTracker", sender: self)
case "panicbutton" :
self.performSegue(withIdentifier: "DashCellToPanicButton", sender: self)
default:
break
//do nothing just ignore this
}
}