我想這是基本的,但我無法理解這一點。如何在子類中訪問ViewController的變量?
我以前只有一個ViewController,其中定義了所有的變量,例如,一個名爲myTextView的UITextView。我在這個ViewController中也有方法來處理與myTextView有關的事件,比如-()hideKeyboard { // do something with myTextView
或- (void)keyboardWillShow:(NSNotification *)notification { // do something with myTextView
。
隨着我的程序變得越來越大,我想到了使用子類,特別是其他視圖。所以我開始了一個子類,例如。 mySubClass.h和mySubClass.m,其中我有另一個UITextView(參數爲myOtherTextView)。爲了將mySubClass,我#imported
它到我的ViewController並添加了一個@class mySubClass;
,然後可以生成這個類的實例,以便在我的應用程序中使用它。
到目前爲止這麼好。正如你可以想象的那樣,我在ViewController中定義的所有好方法都會在編輯UITextView(如隱藏鍵盤等)時發生的情況不適用於mySubClass中的UITextView。
因此,有人建議,我認爲我應該讓另一個類中,我把所有的鍵盤事件和繼承我的ViewController和mySubView它:
@interface ViewController : MyKeyboardEventsViewController
現在,我看到的問題是,我將無法訪問我在ViewController中創建的所有視圖,文本視圖,文本框等(例如前面提到的myTextView)。
我該如何實現在我的ViewController中定義的所有變量也可用於MyKeyboardEventsViewController?或者有另一種方法來處理這個問題?
基本上,我沒有得到MyKeyboardEventsViewController如何訪問我需要的ViewController中的變量(例如UITextView,或者會彈出的accessoryView等等)。
任何建議將非常受歡迎。
所以在我的情況下,UITextField需要在MyKeyboardEventsViewController中定義。我的viewController然後是MyKeyboardEventsViewController的子類,因此可以訪問UITextField。在這種情況下,我不能簡單地將mySubClass分類到我的viewController?或者這是不好的編程習慣?據我現在瞭解,看來我的ViewController中不會留下太多代碼......是那個標準嗎?現在我在我的ViewController中幾乎都有一些東西......我想這不太好。 – 2011-05-03 16:56:16
關於您的編輯:hideKeyboard知道哪些文本框/視圖已發送?例如' - (IBAction)hideKeyboard { \t \t textView.scrollEnabled = NO; \t [textView resignFirstResponder];' – 2011-05-03 17:00:19
爲了您的情況,您應該在viewController中實現您的UITextField,然後在MyKeyboardEventsViewController中實現所有UITextFieldDelegate方法。使你的viewController成爲MyKeyboardEventsViewController的一個子類。 B/c MyKeyboardEventsViewController是UITextFieldDelegate的代理,當它需要響應時它會接收對象(UITextField),因此您不必擔心自己手動傳遞它。 – Cyprian 2011-05-03 17:01:16