2016-04-01 20 views
1

Hızlı bir şekilde bir uygulama oluşturuyorum ve ben bir dokunma duyarlılığı tanıyıcı ve klavyenin görünmesini dinleyen bir NSNotification eklediğim bir görünüm denetleyicisini alt sınıflara ayırıyorum. KlavyeninWillShow için seçiciyi temel görünüm denetleyicimdeki bir işleve koydum. Ancak, görüntü denetleyicimi alt sınıflara ayırdığımda ve klavye şovum olduğunda, uygulamam seçiciyi bulamadığını belirten bir NSException ile sona erdi. Neden böyle olduğunu ve nasıl tamir edebileceğimi açıklayabilir mi?Swift: ViewController alt sınıflandırma ve hedef ekleme ile?

override func viewDidLoad() { 
    super.viewDidLoad() 
    setNotificationListers() 
    setTapGestureRecognizer() 
} 

deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

func setNotificationListers() { 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow:"), name: UIKeyboardWillShowNotification, object: nil) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillHide:"), name: UIKeyboardWillHideNotification, object: nil) 
} 

func setTapGestureRecognizer() { 
    let tapped = UITapGestureRecognizer(target: self, action: "closeKeyboard") 
    tapped.numberOfTapsRequired = 1 
    self.view.addGestureRecognizer(tapped) 
} 

func closeKeyboard() { 
    self.view.endEditing(true) 
} 

func keyboardWillShow() { 
    self.view.frame.origin.y += CGFloat(keyboardHeight) 
} 

func keyboardWillHide() { 
    self.view.frame.origin.y -= CGFloat(keyboardHeight) 
} 

benim alt sınıfta her şeyi geçersiz kılar vermedi: Burada

benim taban görünümü kumandam işlevdir. Ne devralınacak ve ne olmayacak?

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

1

Seçici beyanınız bir parametre gerektirir, ancak işleviniz bir parametre gerektirmez.

Ya kaldırmak : sizin selektör beyanı

NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("keyboardWillShow"), name: UIKeyboardWillShowNotification, object: nil) 

adresinden veya fonksiyon

func keyboardWillShow(notification: NSNotification) { 
    self.view.frame.origin.y += CGFloat(keyboardHeight) 
} 

değiştirip keyboardWillHide için aynı şeyi.

0

Selector yönteminin : yöntemine sahip olduğunu unutmayın; bu, yönteminizin bir parametresine sahip olması gerektiği anlamına gelir. Yani, bu iki yöntemlerinizi değiştirmeniz gerekir:

func keyboardWillShow(notification: NSNotification) { 
    self.view.frame.origin.y += CGFloat(keyboardHeight) 
} 

func keyboardWillHide(notification: NSNotification) { 
    self.view.frame.origin.y -= CGFloat(keyboardHeight) 
} 

Neyse, Xcode 7.3 selector uygulamak şeklini değiştirmek vardır. Ve bu harika lib https://github.com/hackiftekhar/IQKeyboardManager tuşlarını kullanarak klavyeyi yukarı kaldırabilirsiniz. Kullanımı çok basit.

İlgili konular