<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ### 一:兩個view之間的數據相互傳遞。 ### 1)這里兩個view間切換主要用到的是每個類對象固有的屬性(modalTransitionStyle)來設置過渡模式(也就是過渡(切換)到別的界面)。 ### 2)還會用到委托(delegate)來響應事件方法。 ### 3)要特別注意協議delegate: ~~~ @protocol delegate <NSObject> -(void)myupdata:(NSString *)str; @end ~~~ 在此程序中的作用:是從視圖2(MyModalTransition (定義一個id 類型遵循上訴協議的屬性:mydelegate ?。mydalegate會得到視圖1類,從而調用其實現的方法。))返回到視圖1(MyObserver(遵循上訴協議實現其myupdata方法))的重要渠道。 ### 二:新建程序: 第一個view MyObserver.h ~~~ #import <UIKit/UIKit.h> #import "MyClass.h" #import "MyModalTransition.h" @interface MyObserver : UIViewController <delegate> { UITextField *mytext01; } @property(retain) MyClass *myclass; //定義另一個類MyModalTransition的屬性 @property(nonatomic,retain) MyModalTransition *mymtra; @property (nonatomic, strong) IBOutlet UITextField *mytext01; -(void)myupdata:(NSString*) str;- (IBAction)btnpress:(id)sender; -(void)exit; -(IBAction)anytouchback:(id)sender; @end ~~~ MyObserver.m ~~~ #import "MyObserver.h" @implementation MyObserver @synthesize mytext01; @synthesize mymtra; - (void)viewDidLoad { //點擊屏幕鍵盤的return鍵時,鍵盤響應exit方法,放棄第一響應者退出 [self.mytext01 addTarget:self action:@selector(exit) forControlEvents:UIControlEventEditingDidEndOnExit]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } -(void)myupdata:(NSString *)str{ self.mytext01.text=str; //放棄過渡模式,開始開始顯示第一個view [self dismissModalViewControllerAnimated:YES]; } - (IBAction)btnpress:(id)sender { self.mymtra=[[MyModalTransition alloc] init]; //定義模型過渡樣式 mymtra.modalTransitionStyle=UIModalTransitionStylePartialCurl; //mymtra.modalTransitionStyle=UIModalTransitionStyleCoverVertical; //數據傳遞 mymtra.message=self.mytext01.text; //把當前類self傳給另一個視圖的委托 mymtra.mydelegate=self; //呈現模型 [self presentModalViewController:mymtra animated:YES]; } //點擊鍵盤的return鍵,執行此方法,鍵盤退出 -(void)exit{ //放棄第一響應者身份 [self resignFirstResponder]; } //點擊鍵盤空白處將執行此方法鍵盤退出,最重要的一點就是次視圖控制器類必須繼承自UIControl,才能與其Touch Down相連,觸發執行此方法。 -(IBAction)anytouchback:(id)sender{ [ mytext01 resignFristResponder]; } ~~~ 第二個view MyModalTransition.h ~~~ #import <UIKit/UIKit.h> //在這定義協議的原因是:這樣mydelegate屬性遵循協議的時候本身就有了myupdata方法,其實現部分就是在上一個視圖MyObserver里。當mydelegate獲得MyObserver時就可以調用這個方法了。 @protocol delegate <NSObject> -(void)myupdata:(NSString *)str; @end @interface MyModalTransition : UIViewController { UITextField *mytext02; } //遵循delegate協議就擁有了其myupdata方法 @property(assign) id <delegate>mydelegate; @property (nonatomic, strong) IBOutlet UITextField *mytext02; @property(copy) NSString *message; - (IBAction)btnbackpress:(id)sender; @end ~~~ MyModalTransition.m ~~~ #import "MyModalTransition.h" @implementation MyModalTransition @synthesize mytext02; @synthesize mydelegate; @synthesize message; //點擊按鈕 - (IBAction)btnbackpress:(id)sender { NSString *str=mytext02.text; //值傳遞 [self.mydelegate myupdata:str]; } #pragma mark - View lifecycle - (void)viewDidLoad { self.mytext02.text=message; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } ~~~ ![](https://box.kancloud.cn/2016-06-12_575cce7fd9866.png) ### 運行結果: ![](https://box.kancloud.cn/2016-06-12_575cce80089a0.gif) 小結: 1.到這里可能會有個疑問,就是傳遞數據時為什么另外定義一個message 而不直接使用視圖2里的textfield屬性。原因就是當程序開始運行時展示的是視圖1,視圖1里直接用視圖2的對象去調用視圖2的屬性,是不行的。因為這時textfield雖然隨著nib文件的加載而被實例化,然而還沒有被解凍,不能使用,只有當視圖2的視圖呈現時才被解凍,可以使用。 2.另外一個疑問就是這里定義的delegate協議:試想一下,如果沒有定義協議delegate,只是在視圖1里定義了myupdata方法,而視圖2 里的屬性mydelegate得到視圖1類去調用這個方法,這看起來合情合理。但,這樣寫程序會報錯的,原因就是程序分為編譯時和運行時兩個狀態,當編譯視圖2的[self.mydelegate myupdata:str];這段代碼時會報錯,因為這時mydelegate還沒有得到第視圖1類,而現在視圖2里是沒有名為myupdata的方法的,mydelegate就不能調用,所以程序就會報編譯錯誤。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看