我正在为大学开发我的第一个iOS应用程序。当您启动应用程序时,有一个分组表视图应该代表一个菜单。这到目前为止工作正常,但我无法正确连接segues。据我所知,我应该将单元本身与导航控制器连接起来。虽然每个单元格都应该导致另一个导航控制器这是一个菜单,所以这一点应该清楚。不幸的是,我无法将单个单元连接到多个导航控制器,当我添加多个原型单元时,我遇到的问题是每个单元都应该有自己的标识符。
您在我的应用中看到的第一个屏幕看起来基本上就像邮件应用。有两组,每个单元通向另一个导航控制器。
我设法以某种奇怪的方式实现导航,但是获得了很多错误,例如“嵌套推送导致损坏的导航栏”。
我现在非常沮丧,我已经花了很多时间处理这个问题而且我找不到任何解决方案。
编辑: 目前最大的问题之一是,如果我导航到一个点然后返回视图之前,分组视图首先显示得太靠近顶部,当动画完成时,整个视图会跳回到它所属的位置。
它应该是这样的(看起来像它跳回来的时候):https://dl.dropboxusercontent.com/u/34140308/uploads/2016-04-25%2010.28.48.png
这就是动画期间的样子:https://dl.dropboxusercontent.com/u/34140308/uploads/2016-04-25%2010.28.48%202.png
edit2:我将视图控制器本身(不是单元格)与相应的视图控制器连接起来。然后我以编程方式调用segues:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
if indexPath.section == 0 {
if indexPath.row == 0 {
self.performSegueWithIdentifier("showSpeiseplan", sender: self)
} else if indexPath.row == 1 {
self.performSegueWithIdentifier("showStudiersaal", sender: self)
} else if indexPath.row == 2 {
self.performSegueWithIdentifier("showErzieher", sender: self)
} else if indexPath.row == 3 {
self.performSegueWithIdentifier("showHausordnung", sender: self)
} else if indexPath.row == 4 {
self.performSegueWithIdentifier("showNews", sender: self)
}
} else if indexPath.section == 1 {
if indexPath.row == 0 {
self.performSegueWithIdentifier("showZugewieseneStunden", sender: self)
}
}
}
现在另一个主要问题是,如果您在加载单个单元格之前多次按下单个单元格,那么该视图也会多次打开。
答案 0 :(得分:1)
我通常从tableView中进行segue的方法是通过连接viewController而不是tableviewCells的segue。这样你就可以在didSelectRowAtIndexPath中调用performSegueWithIdentifier。
例如
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
tableView.userInteractionEnabled = false
switch indexPath.section {
case 0:
switch indexPath.row {
case 0: performSegueWithIdentifier("showSpeiseplan", sender: self)
case 1: performSegueWithIdentifier("showStudiersaal", sender self)
case 2: performSegueWithIdentifier("showErzieher", sender self)
case 3: performSegueWithIdentifier("showHausordnung", sender self)
case 4: performSegueWithIdentifier("showNews", sender self)
default: tableView.userInteractionEnabled = true
}
case 1:
switch indexPath.row {
case 0: performSegueWithIdentifier("showZugewieseneStunden", sender: self)
default: tableView.userInteractionEnabled = true
}
default: tableView.userInteractionEnabled = true
}
}
并在viewWillDisappear中显示:
override func viewDidDisappear(animated: Bool) {
tableView.userInteractionEnabled = true
}
如果你的单元格是可编辑的或动态的(它们改变了indexPath),那么要么使用cellForRowAtIndexPath中的cell.tag来区分它们,要么为你的自定义单元格类添加一个属性(或者如果你还没有,则添加一个属性)并添加可用于识别正确segue的属性。
编辑:要修复动态上的tableView Offset跳转,请在viewDidLoad上方创建一个变量tableViewContentOffset,然后在viewDidLoad中添加:
tableViewContentOffset = tableView.contentOffset
并在viewWillAppear中恢复它,如果它已更改。
if tableView.contentOffset != tableViewContentOffset {
tableView.contentOffset = tableViewContentOffset
}
另外,也许只是看看当你把它放在viewWillAppear中时会发生什么:
tableView.contentOffset = CGPointZero
tableView.contentInset = UIEdgeInsetsZero