iOS開發那些事-iOS常用設計模式–委託模式案例實現

來源:互聯網
上載者:User

書接上回,應用案例

我們以UITextFieldDelegate為例來說明一下委託的使用。 UITextFieldDelegate是控制項UITextField的 委託,控制項的委託主要負責響應控制項事件或控制其他對象。除了UITextField,WebView、UITableView等控制項也有相應的委派物件。

開啟UITextFieldDelegate的API文檔,其中有4個有關編輯的方法,還要3個其它方法。

這裡我們在編輯過程中訊息的發送,UITextField編輯過程中與UITextFieldDelegate委派物件之間互動過程。

在 文字框編輯開始前後會發出訊息textFieldShouldBeginEditing:和 textFieldDidBeginEditing:,編輯結束前後會發出訊息textFieldShouldEndEditing:和 textFieldDidEndEditing:。

為了示範文字框編輯前後發生了什麼,我們需要編寫一個簡單的文字框工程,畫面中只有一個文字框。

我們在視圖控制器ViewController中實現UITextFieldDelegate,ViewController是UITextField的委派物件。ViewController.h代碼如下:

#import <UIKit/UIKit.h>@interface ViewController : UIViewController<UITextFieldDelegate>@property (weak, nonatomic) IBOutlet UITextField *textField;@end

 

 

h檔案中ViewController實現了UITextFieldDelegate協議,把UITextField 定義為一個弱引用的“輸出口”(“輸出口”概念我們將在UIView與控制項一章詳細介紹)。

ViewController.m代碼如下:

@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    self.textField.delegate = self;}#pragma mark — UITextFieldDelegate method- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{    NSLog(@”call textFieldShouldBeginEditing:”);    return YES;}- (void)textFieldDidBeginEditing:(UITextField *)textField{    NSLog(@”call textFieldDidBeginEditing:”);}- (BOOL)textFieldShouldEndEditing:(UITextField *)textField{    NSLog(@”call textFieldShouldEndEditing:”);    return YES;}- (void)textFieldDidEndEditing:(UITextField *)textField{    NSLog(@”call textFieldDidEndEditing:”);}- (BOOL)textFieldShouldReturn:(UITextField *)textField{    NSLog(@”call textFieldShouldReturn:”);    [textField resignFirstResponder];    return YES;}@end

 

 

在 m檔案中viewDidLoad 方法self.textField.delegate = self語句極為重要,它將委派物件ViewController分配給文字框對象,除了通過代碼我們也可以通過IB工具進行連線分配。開啟故事板檔案, 右鍵點擊文字框控制項,快顯功能表,用滑鼠拖拽位於Outlets(輸出口)下面的delegate後面的圓圈,到View Controller上鬆開滑鼠。

這樣運行代碼,當觸摸文字框使其處於編輯狀態時,在日誌中會輸出:

call textFieldShouldBeginEditing:

call textFieldDidBeginEditing:

輸入完成點擊“return”鍵關閉鍵盤,結束編輯狀態,日誌中輸出:

call textFieldShouldReturn:

call textFieldShouldEndEditing:

call textFieldDidEndEditing:

textFieldShouldReturn:是點擊“return”鍵發出的訊息。我們藉助於該訊息通過[textField resignFirstResponder]方法關閉鍵盤。

更 複雜的控制項(如UITableView)除了委託協議(UITableViewDelegate)還有 資料來源協議(UITableViewDataSource)。資料來源與委託一樣都是委託設計模式的具應用,委派物件主要對控制項對象的事件和狀態變化做出響 應,而資料來源對象是為控制項對象提供資料。需要注意的是委託中的方法在實現時是可選的,而資料來源中的方法一般必須實現。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.