子视图单击项目以显示在父视图标签中

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!" )
    

【讨论】:

非常感谢。我会试一试的。

以上是关于子视图单击项目以显示在父视图标签中的主要内容,如果未能解决你的问题,请参考以下文章

使用单击子视图中的表格单元格来填充视图中的字段

如何子列表视图项目可以有每个项目的数据

如何通过按钮单击控制标签栏项目?

调整容器视图的高度以匹配子视图的高度

Swift - 子视图上的按钮,在父视图中显示方向

TempData 仅显示在子局部视图中,而不显示在父局部视图中