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 动作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中为 UIBarButtonItem 设置动作
在 Swift 中获取 UIBarButtonItem 的视图