【问题标题】:IOS swift UIBarButtonItem actionIOS swift UIBarButtonItem 动作
【发布时间】:2017-09-12 16:35:52
【问题描述】:

我有一个嵌入了导航控制器的表格视图。我添加了一个 UIBarButtonItem(添加)按钮。当我单击此按钮时,它会打开一个新视图,用户在其中输入数据并提交它(这会进行 Web 服务调用)并返回到前一个视图。这种导航如下图所示,

func addTapped(_ sender:UIBarButtonItem) {
     print("Called Add")
     let vc = (storyboard?.instantiateViewController( withIdentifier: "newNote")) as! newNoteVC
     self.navigationController?.pushViewController(vc, animated: true)
}

在新视图中我会关注,

@IBAction func saveButton(_ sender: UIButton) {
    if (self.noteDescription.text?.isEmpty)! {
        print("Enter missing note description")
        return
    } else {
        let desc = self.noteDescription.text
        self.uploadNote(noteText: desc!, noteDate: self.dateInMilliseconds)
        self.navigationController?.popViewController(animated: true)
    }
}

这样一条记录被保存,一个视图从导航控制器堆栈中弹出,但我唯一不知道的就是刷新父视图中的表视图数据(我可能需要创建一个新的 http 服务调用以读取所有记录)。

我希望我能够解释这个问题?任何帮助表示赞赏。

【问题讨论】:

  • 您需要刷新 currentViewController 中的表格还是之前的表格?
  • 我建议使用协议/委托模式将新注释传回您的UITableViewController。见这里:stackoverflow.com/questions/30618172/…
  • 当您可以简单地将一条记录传回并将其添加到您的表格视图时,发出 http 请求以获取数据似乎有点矫枉过正
  • @Rainier,所以 controllerOne 是一个 tableviewcontroller,而 controllerTwo 是一个简单的视图控制器,用于添加新的 Note 信息并提交。这意味着 controllerOne 需要在 controllerTwo 成功返回之后进行刷新或重新加载。由于导航栏,用户只需单击后退按钮(箭头),这意味着无需刷新。但在成功“保存”后,我们必须刷新。
  • @toddg 这是一个很好的建议,并且可以无缝运行。谢谢。

标签: ios swift uitableview uinavigationcontroller


【解决方案1】:

正如 cmets 中所提到的,仅仅为了更新 tableview 而进行服务调用可能是一种矫枉过正的做法。但是,如果这是需要实现的业务场景,您可以在

中执行相同的操作

func viewWillAppear

在父视图控制器中。您可以在此方法中进行服务调用并使用数据重新加载表视图。 您还需要检查应用程序的整体导航,因为在 viewWillAppear 方法中进行服务调用不是一个好方法,因为每次显示视图时都会调用这些方法。例如:如果从导航视图返回,则该方法也会被调用。

【讨论】:

    猜你喜欢
    • 2014-10-18
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    相关资源
    最近更新 更多