你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發那些事-iOS常用設計模式–委托模式案例實現

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

編輯:IOS開發綜合
我們以UITextFieldDelegate為例來說明一下委托的使用。UITextFieldDelegate是控件UITextField的 委托,控件的委托主要負責響應控件事件或控制其他對象。除了UITextField,WebView、UITableView等控件也有相應的委托對象。   打開UITextFieldDelegate的API文檔,其中有4個有關編輯的方法,還要3個其它方法。       61 這裡我們在編輯過程中消息的發送,UITextField編輯過程中與UITextFieldDelegate委托對象之間交互過程。     71   在文本框編輯開始前後會發出消息textFieldShouldBeginEditing:和 textFieldDidBeginEditing:,編輯結束前後會發出消息textFieldShouldEndEditing:和 textFieldDidEndEditing:。   為了演示文本框編輯前後發生了什麼,我們需要編寫一個簡單的文本框工程,畫面中只有一個文本框。     81   我們在視圖控制器ViewController中實現UITextFieldDelegate,ViewController是UITextField的委托對象。ViewController.h代碼如下:   [cpp]  #import <UIKit/UIKit.h>       @interface ViewController : UIViewController<UITextFieldDelegate>      @property (weak, nonatomic) IBOutlet UITextField *textField;      @end     #import <UIKit/UIKit.h>   @interface ViewController : UIViewController<UITextFieldDelegate>   @property (weak, nonatomic) IBOutlet UITextField *textField;   @end     h文件中ViewController實現了UITextFieldDelegate協議,把UITextField 定義為一個弱引用的“輸出口”(“輸出口”概念我們將在UIView與控件一章詳細介紹)。   ViewController.m代碼如下:   [cpp]  @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     @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上松開鼠標。     91   這樣運行代碼,當觸摸文本框使其處於編輯狀態時,在日志中會輸出:   call textFieldShouldBeginEditing:   call textFieldDidBeginEditing:   輸入完成點擊“return”鍵關閉鍵盤,結束編輯狀態,日志中輸出:   call textFieldShouldReturn:   call textFieldShouldEndEditing:   call textFieldDidEndEditing:   textFieldShouldReturn:是點擊“return”鍵發出的消息。我們借助於該消息通過[textField resignFirstResponder]方法關閉鍵盤。   更復雜的控件(如UITableView)除了委托協議(UITableViewDelegate)還有 數據源協議(UITableViewDataSource)。數據源與委托一樣都是委托設計模式的具應用,委托對象主要對控件對象的事件和狀態變化做出響 應,而數據源對象是為控件對象提供數  
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved