2015-07-01 45 views
2

我想創建一個具有標籤,表格視圖和單擊按鈕的UI。當點擊按鈕時,我們彈出一個有很多按鈕的半屏視圖。我希望用戶仍然可以點擊屏幕的其餘部分。子視圖點擊要在父視圖標籤中顯示的項目

所以我使用的是在後 How To Present Half Screen Modal View?

方法2建議做法:動畫一個UIView是一半大小的現有觀點的。 然後你只需要按照UIView的動畫。 在這裏,因爲它只是一個UIView,將作爲子視圖添加到現有視圖中,您將能夠觸摸屏幕的其餘部分。

由於我是新手到iOS和迅速,我想獲得一些建議。 現在我成功添加爲子視圖並顯示在屏幕的一半。

我如何實現讓子視圖點擊按鈕結果顯示在父視圖標籤文本上?

我在考慮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!") 
    } 
} 
+0

非常感謝。我會試一試。 –

相關問題