【问题标题】:Change View with NavigationViewController使用 NavigationViewController 更改视图
【发布时间】:2016-03-26 11:44:18
【问题描述】:

这可能是一个微不足道的问题,但我还没有找到解决方案。我正在使用 Swift 为 Iphone 制作一个应用程序。

我有一个带有一些字符串的表格视图,如果我按下一个按钮,我想直接导航回上一个视图。但是,我调用后的代码

navigationController?.popViewControllerAnimated(true)

始终运行,但我希望当前活动停止并返回上一个视图。

代码如下:

    @IBAction func DeletePressed(sender: UIButton) {
    let deleteIndices = getIndexToDelete()
    navigationController?.popViewControllerAnimated(true)

    print("After navigationController")
    for index in deleteIndices{
        results?.ListResults[yearShownIndex].months[monthShownIndex].day[dayShownIndex].results.removeAtIndex(index)
    }
    if (results?.ListResults[yearShownIndex].months[monthShownIndex].day[dayShownIndex].results.count == 0){
        results?.ListResults[yearShownIndex].months[monthShownIndex].day.removeAtIndex(dayShownIndex)
    }
    if (results?.ListResults[yearShownIndex].months[monthShownIndex].day.count == 0){
        results?.ListResults[yearShownIndex].months.removeAtIndex(monthShownIndex)
    }
    if (results?.ListResults[yearShownIndex].months.count == 0){
        results?.ListResults.removeAtIndex(monthShownIndex)
    }
    loadView()
}

始终显示“在导航控制器之后”。

在 android 中,您可以通过创建意图来启动一个新 Activity 以获得所需的行为,但它在 Iphone 上是如何工作的?

我的问题是我希望能够在调用navigationController.popViewControllerAnimated 时直接返回。这只是一个玩具示例,用于了解它是如何工作的,以便我以后可以在 if 子句中使用它。

【问题讨论】:

  • 你想做什么? navigationController?.popViewControllerAnimated(true) 会让你回到上一个视图
  • 你要做什么,popViewController 会带你回去,但是下面的代码是什么?你有什么问题,你有什么问题?

标签: ios iphone swift popviewcontrolleranimated


【解决方案1】:

您可以在弹出视图控制器后简单地添加 return 语句:

@IBAction func DeletePressed(sender: UIButton) {
    let deleteIndices = getIndexToDelete()
    navigationController?.popViewControllerAnimated(true)
    return;
    [...]

【讨论】:

  • 打印语句仍在执行,但 if 子句不执行。好像有点奇怪。
  • 这很奇怪。你确定没有其他打印语句被执行吗?通常return 应该结束函数...
  • 是的,我也是这么想的,改变了那个特定的打印语句,但是输出也改变了,所以它确实是那个语句。
  • 我还在 if 子句之后添加了一个打印语句,它没有被执行。我已经重新编译了好几次了。
  • 现在我知道了:您必须在 return 语句后添加一个分号。否则,在 return 语句之后的行 将被视为 return 语句的一个参数,并且 - 在这种情况下 - 因此被打印出来。检查我的更新答案!
【解决方案2】:

如果您不想在 "print("After navigationController")" 之后执行代码,则删除该代码

或者在调用 DeletePressed 时无法删除然后切换它

【讨论】:

  • 嗯,这是一个玩具示例,我必须了解它的行为。有时我想回去,有时我想留在那个视图中。现在我想每次都回去,这样我就知道它可以工作了,我不希望程序调用 print("After navigationController")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2015-02-09
  • 1970-01-01
相关资源
最近更新 更多