2015-02-10 21 views
4

所有,我的問題是一個跟進這一個:SWIFT - Hide a view container with a button in the ViewContainerIOS視圖容器:如何設置委託

總之,我有一個UIViewController(主),其中包含一個「查看」和containerView。容器視圖(「containerView」)具有單個按鈕「HIDE」。 containerView最初是隱藏的,當點擊「SHOW」按鈕時,它會被顯示出來。一切都很好。我想使用一個委託,當點擊「隱藏」按鈕時,containerView將被隱藏。

我明白所有的委託的東西,除了containerView如何成爲一個viewController,以便我可以分配主要委託?

容器視圖是一個UIView(以某種方式)指向/包含視圖控制器,但我無法確定如何引用它。

import UIKit 

class MainViewController: UIViewController,dismissPickerViewDelegate { 

    @IBOutlet weak var pickerContainerView: containerView! 
    @IBOutlet weak var showButton: UIButton! 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     pickerContainerView.hidden = true 
    } 

    @IBAction func showButtonTapped(sender: AnyObject) { 
     println("+Show") 
     pickerContainerView.hidden = false 
     println("-Show") 
    } 

    func dismissPicker() 
    { 
     println("+dismissPicker") 
     println("-dismissPicker") 
    } 
} 


// ======================== 

import UIKit 

protocol dismissPickerViewDelegate { 
    func dismissPicker() 
} 

class pickerViewController: UIViewController { 

    var delegate : dismissPickerViewDelegate? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    @IBOutlet weak var hideButton: UIButton! 
    @IBAction func hideButtonTapped(sender: AnyObject) { 
     println("+hideButtonTapped") 
     delegate?.dismissPicker() 
     println("-hideButtonTapped") 
    } 
} 

輸出: +顯示 -Show + hideButtonTapped -hideButtonTapped

TIA, :BP:

回答

3

它並不需要是爲了允許分配一個視圖控制器的代表。代表只是一個對象的屬性。只要做到這一點在你的視圖控制器:

override func viewDidLoad() { 
    super.viewDidLoad() 
    pickerContainerView.delegate = self 
    pickerContainerView.hidden = true 
} 
+0

謝謝,但:我收到一個錯誤:'containerView'沒有一個名爲的成員'委託'(我知道這必須是飛行員的錯誤,但是...我沒有看到它) – 2015-02-10 17:06:56

+0

對不起,我誤解了你的代碼。這是非常難以遵循的。我剛纔假設你把'pickerContainerView'作爲'pickerViewController'。 'containerView'如何與任何東西相關? – 2015-02-10 17:09:15

+0

它實質上是UIView的空子類。如果我更改@IBOutlet弱變量pickerContainerView:containerView!到IBOutlet弱var pickerContainerView:UIView!我得到同樣的東西:UIView沒有一個名爲'委託'的成員。 – 2015-02-10 17:12:55

1

如果您的ViewController有任何ContainerView,然後視圖控制器調用prepareForSegueawakeFromNib

此調用之前viewDidLoad

這樣你就可以在

func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
設置委託

第一個

設置你的EmbededSegue標識符

enter image description here

其次在prepareForSegue功能設置您的委託embededVC

enter image description here

最後在EmbededViewController來電隱藏功能MainViewController enter image description here