2015-02-22 19 views
5

UITapGestureRecognizer'a bağlı bir özel UIView var.iOS'ta başka bir işlevden bir blok tamamlama işleyicisi çağırmak mümkün mü?

func hide(sender:UITapGestureRecognizer){ 
    if let customView = sender.view as? UICustomView{ 
     customView.removeFromSuperview() 
    } 
} 

UICustomView da subview ekler bir gösteri() yöntemi vardır, örneğin:

func show(){ 
    // Get the top view controller 
    let rootViewController: UIViewController = UIApplication.sharedApplication().windows[0].rootViewController!! 
    // Add self to it as a subview 
    rootViewController.view.addSubview(self) 
} 
hareket tanıyıcı bir yöntem olup adı gizlemek() gibi Superview görünümden kaldırmak için çağırır bir UICustomView oluşturmak ve bu şekilde görüntülemek anlamına gelir

:

let testView = UICustomView(frame:frame) 
testView.show() // The view appears on the screen as it should and disappears when tapped 

Şimdi, çağrılan bir tamamlama bloğu ile bir yöntem haline şovum() yöntemini açmak istediğinizde sakla () işlevi tetiklenir.

testView.show(){ success in 
    println(success) // The view has been hidden 
} 

Ama bunu yapmak için benim hide() yönteminden gösterisi() metodunun tamamlama yöneticisini çağırmak zorunda kalacak: gibi bir şey. Bu mümkün mü yoksa bir şeye mi bakıyordum?

cevap

8

UICustomView'u uyguladığınızdan, yapmanız gereken tek şey 'tamamlama işleyicisini' UICustomView sınıfının bir parçası olarak saklamaktır. Ardından, hide() çağrıldığında işleyiciyi çağırırsınız.

class UICustomView : UIView { 
    // ... 

    override func viewDidDisappear(_ animated: Bool) { 
    super.viewDidDisappear (animated) 
    onHide?(true) 
    } 
} 

Sen düşünebilirsiniz bu: senin UICustomView Eğer yaşam döngüsü yöntemlerinden birini geçersiz olabilir UIView bir alt sınıfı gibi viewDidAppear, viewDidDisappear vb: Elbette

class UICustomView : UIView { 
    var onHide: ((Bool) ->())? 

    func show (onHide: (Bool) ->()) { 
    self.onHide = onHide 
    let rootViewController: UIViewController = ... 
    rootViewController.view.addSubview(self) 
    } 

    func hide (sender:UITapGestureRecognizer){ 
    if let customView = sender.view as? UICustomView{ 
     customView.removeFromSuperview() 
     customView.onHide?(true) 
    } 
} 

, her UIView bir yaşam döngüsü vardır görünüm hide() aramaya kaybolabilir, ancak yine de onHide çalışmasını istiyorsanız ikinci bir yaklaşım.

+2

Clever! Ve bir çekicilik gibi çalışır, teşekkürler @GoZoner :) – Audioy

İlgili konular