6/08/2011

[iPhone] Delegate 釐清


      如果我們去看 AppKit 或是 UIKit,一定可以看到 view 要跟 controller 要資料的狀況,最常用來處理資料的 view 莫過於 NSTableView 或 UITableView,我們要怎樣把資料提供給 NSTableView 與 UITableView 呢?就是實作這些 table view 需要的 data source method而所謂的 data source就是強調資料內容這一部分的 delegate method。我相信任何一本講 ObjC、Cocoa 或 iPhone 開發的書,都會講到 delegate。

      View 所要求的 delegate,其實就是在這個 view 的成員變數當中,有一個叫做 delegate 的物件指標,這個物件不是在 View 的 class 當中產生,而是在別的地方產生,然後告訴這個 view 這個物件的位置。而當 view 需要做某件事情的時候,就去問一下這個 delegate,遇到這件事情的時候應該怎麼處理如果 delegate 沒有特別說要做什麼(也就是沒有實作某個 delegate method),那麼 view 就直接按照預設的行為繼續工作。
以上是節錄於某為網路專家的文章,算寫的很好能幫助觀念釐清,下面介紹關使用 UITextField 並交由Delegate的方式UITextFieldDelegate


1.ViewController.h 加入 UITextFieldDelegate

@interface PressureConverterViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource, UITextFieldDelegate>
原則上要使用Delegate就在ViewController.h加入就好了,可以加入很多Delegate

2.實作Delegate提供的Methold
#pragma mark -

#pragma mark UITextFieldDelegate

// 讓鍵盤在click return後消失
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
// the user pressed the "Done" button, so dismiss the keyboard
[textField resignFirstResponder];
return YES;
}
// 讓鍵盤在輸入任一數值後判斷
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
}

Delegate提供的Methold,要去找apple官網找找看Methold有什麼,以及相關參數有什麼

沒有留言:

張貼留言

請留言~一起討論吧~