IOS swift UIBarButtonItem 动作

Posted

技术标签:

【中文标题】IOS swift UIBarButtonItem 动作【英文标题】:IOS swift UIBarButtonItem action 【发布时间】: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。见这里:***.com/questions/30618172/… 当您可以简单地将一条记录传回并将其添加到您的表格视图时,发出 http 请求以获取数据似乎有点矫枉过正 @Rainier,所以 controllerOne 是一个 tableviewcontroller,而 controllerTwo 是一个简单的视图控制器,用于添加新的 Note 信息并提交。这意味着 controllerOne 需要在 controllerTwo 成功返回之后进行刷新或重新加载。由于导航栏,用户只需单击后退按钮(箭头),这意味着无需刷新。但在成功“保存”后,我们必须刷新。 @toddg 这是一个很好的建议,并且可以无缝运行。谢谢。 【参考方案1】:

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

中执行相同的操作

func viewWillAppear

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

【讨论】:

以上是关于IOS swift UIBarButtonItem 动作的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式工具栏项目不显示iOS swift 4

Swift,与 UIBarButtonItem 混淆

如何在 Swift 中为 UIBarButtonItem 设置动作

在 Swift 中获取 UIBarButtonItem 的视图

Swift - iOS 8 中的 UIPopoverController

使用 Swift 调整 UIBarButtonItem 的字距