子视图单击项目以显示在父视图标签中
Posted
技术标签:
【中文标题】子视图单击项目以显示在父视图标签中【英文标题】:SubView click item to show in parent view label 【发布时间】:2015-07-01 16:14:19 【问题描述】:我想制作一个具有标签、表格视图和一键单击的 UI。当点击按钮时,我们会弹出一个有很多按钮的半屏视图。我希望用户仍然可以点击屏幕的其余部分。
所以我使用帖子中建议的方法 How To Present Half Screen Modal View?
方法 2:为大小为现有视图一半的 UIView 设置动画。 然后你必须简单地跟随 UIView 的动画。 由于它只是一个 UIView,它将作为子视图添加到现有视图中,因此您将能够触摸屏幕的其余部分。
由于我是 ios 和 swift 的新手,我想得到一些建议。 现在我成功添加为子视图并显示在屏幕的一半。
如何实现让子视图单击按钮结果显示在父视图标签文本上?
我正在考虑 parent.xib 和 subview.xib 具有相同的 UIVeiwController.swift。然后我可以 @IBOutlet 和 @IBAction 到同一个控制器 swift 文件并更新结果。但不知道这是可接受的方式吗?
如果没有,subViewController 如何将结果/事件发送到父视图并在父视图组件中更新?
【问题讨论】:
【参考方案1】:您可以使用委托。这使您的视图控制器保持解耦,即防止子级对其父级的引用,这允许其他视图控制器以相同的方式与模态视图控制器进行交互。
class ParentViewController : UIViewController, ModalViewControllerDelegate
@IBOutlet weak var label: UILabel!
override func viewDidLoad()
super.viewDidLoad()
let modalViewContorller = ModalViewController()
modalViewContorller.delegate = self
self.presentViewController( modalViewContorller, animated: true, completion: nil )
func modalViewControllerDidProduceResult( modalViewController: ModalViewController, result: String )
self.label.text = result
protocol ModalViewControllerDelegate
func modalViewControllerDidProduceResult( modalViewController: ModalViewController, result: String )
class ModalViewController: UIViewController
var delegate: ModalViewControllerDelegate?
@IBAction func buttonClicked( sender: AnyObject? )
delegate?.modalViewControllerDidProduceResult( self, result: "Hello!" )
你也可以使用闭包,它在 Swift 中提供了更简洁的语法。
class ParentViewController : UIViewController
@IBOutlet weak var label: UILabel!
override func viewDidLoad()
super.viewDidLoad()
let modalViewContorller = ModalViewController()
self.presentViewController( modalViewContorller, animated: true, completion: nil )
modalViewContorller.resultBlock = (result: String) in
self.label.text = result
class ModalViewController: UIViewController
var resultBlock: ((String) -> ())?
@IBAction func buttonClicked( sender: AnyObject? )
self.resultBlock?( "Hello!" )
【讨论】:
非常感谢。我会试一试的。以上是关于子视图单击项目以显示在父视图标签中的主要内容,如果未能解决你的问题,请参考以下文章