【问题标题】: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 如何将结果/事件发送到父视图并在父视图组件中更新?

【问题讨论】:

    标签: ios swift


    【解决方案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!" )
        }
    }
    

    【讨论】:

    • 非常感谢。我会试一试的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多