iOS_16_開關控制器_modal_代碼方法

來源:互聯網
上載者:User

標籤:

最後:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcHJlX2VtaW5lbnQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >


main.storyboard



BeyondViewController.h

////  BeyondViewController.h//  16_控制器切換方式1_Modal_通過代碼方式////  Created by beyond on 14-7-30.//  Copyright (c) 2014年 com.beyond. All rights reserved.//#import <UIKit/UIKit.h>@interface BeyondViewController : UIViewController// 提示歡迎誰誰誰@property (weak, nonatomic) IBOutlet UILabel *welcomeLabel;@property (weak, nonatomic) IBOutlet UIButton *wantLoginBtn;@property (weak, nonatomic) IBOutlet UIButton *wantLogoutBtn;// 點擊BeyondViewController介面上的登入button,切換到BeyondLoginViewController.h進行輸入password帳號登入- (IBAction)wantLogin:(UIButton *)sender;- (IBAction)wantLogout:(UIButton *)sender;@end


BeyondViewController.m

////  BeyondViewController.m//  16_控制器切換方式1_Modal_通過代碼方式////  Created by beyond on 14-7-30.//  Copyright (c) 2014年 com.beyond. All rights reserved./* 控制器切換的3種方式: 1,modal (模態對話方塊,新的控制器從底部往上展開,遮住後面的控制器)(很多其它能夠參看 羅雲彬的<琢石成器—Windows環境下32位組合語言程式設計>第5.4章 對話方塊)    通過代碼實現切換    通過storyboard實現切換  2,push 通過UINavigationController管理的棧實現    從右往左邊展開,彈出新的控制器(處於棧頂),    涉及內容主要有:                參數的傳遞                導覽列的標題定製                跳轉前的驗證,典型如登入跳轉前的client校正  3,UITabbarController    以平行的方式是管理子視圖控制器  4,自己定義容器,相似抽屜效果(右滑,彈出左側側邊欄)  */#import "BeyondViewController.h"#import "BeyondLoginViewController.h"@interface BeyondViewController ()<BeyondLoginViewControllerDelegate,UIActionSheetDelegate>@end@implementation BeyondViewController- (void)viewDidLoad{    [super viewDidLoad];}// 點擊BeyondViewController介面上的登入按鈕,切換到BeyondLoginViewController.h進行輸入password帳號登入- (IBAction)wantLogin:(UIButton *)sender {    // 想通過代碼以Modal的方式,切換到BeyondLoginViewController控制器,就必須建立執行個體對象,耦合性太強~    BeyondLoginViewController *loginViewCtrl = [[BeyondLoginViewController alloc]init];    // 設定loginViewCtrl的代理 為當前控制器,由於,在下一個控制器(loginViewCtrl)中,使用者輸入完使用者名稱和password之後,會調用代理 的doSomethingWithUsername方法,給它的代理對象(即當前控制器)發訊息,參數 就是要傳遞過來的使用者名稱~    loginViewCtrl.delegate = self;    // 關鍵,代碼,全部控制器都有該方法,展現    [self presentViewController:loginViewCtrl animated:YES completion:^{        NSLog(@"BeyondLogin控制器--出現了");    }];}// 實現下一個控制器中代理方法,由於在下一個控制器(loginViewCtrl)中,使用者輸入完使用者名稱和password之後,會調用代理 的doSomethingWithUsername方法,給它的代理對象(即當前控制器)發訊息,參數 就是要傳遞過來的使用者名稱~- (void)doSomethingWithLoginName:(NSString *)username{    username = [NSString stringWithFormat:@"歡迎回來:%@",username];    _welcomeLabel.text = username;        // 禁用登入按鈕    _wantLoginBtn.enabled = NO;    _wantLogoutBtn.enabled = YES;}- (IBAction)wantLogout:(UIButton *)sender{    UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"確定登出嗎?" delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"確定" otherButtonTitles:nil, nil];    [actionSheet showInView:self.view];}#pragma mark - actionSheet的代理 方法- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{    NSLog(@"按鈕索引:%d",buttonIndex);    // 確定登出   索引是 0    if (buttonIndex == 0) {        // 登出        _wantLoginBtn.enabled = YES;        _wantLogoutBtn.enabled = NO;        _welcomeLabel.text = @"";    }    // 取消   索引是 1  doNothing    }@end

協議 

BeyondLoginViewControllerDelegate.h

////  BeyondLoginViewControllerDelegate.h//  16_控制器切換方式1_Modal////  Created by beyond on 14-7-30.//  Copyright (c) 2014年 com.beyond. All rights reserved.//#import <Foundation/Foundation.h>@protocol BeyondLoginViewControllerDelegate <NSObject>- (void) doSomethingWithLoginName:(NSString *)username;@end


BeyondLoginViewController.xib


BeyondLoginViewController.h

////  BeyondLoginViewController.h//  16_控制器切換方式1_Modal////  Created by beyond on 14-7-30.//  Copyright (c) 2014年 com.beyond. All rights reserved.//#import <UIKit/UIKit.h>#import "BeyondLoginViewControllerDelegate.h"@interface BeyondLoginViewController : UIViewController// id類型的代理 (weak弱引用),調用代理 的方法,將本控制器中使用者輸入的姓名,通過參數傳遞給 代理 ,供其使用@property (nonatomic,weak) id <BeyondLoginViewControllerDelegate> delegate;@property (weak, nonatomic) IBOutlet UITextField *username;@property (weak, nonatomic) IBOutlet UITextField *password;// 向server提交username與password- (IBAction)submit:(UIButton *)sender;// 點擊返回button,返回到前一個控制器- (IBAction)backToHome:(UIBarButtonItem *)sender;@end


BeyondLoginViewController.m

////  BeyondLoginViewController.m//  16_控制器切換方式1_Modal////  Created by beyond on 14-7-30.//  Copyright (c) 2014年 com.beyond. All rights reserved.//#import "BeyondLoginViewController.h"#import "BeyondViewController.h"#import "BeyondLoginViewControllerDelegate.h"@interface BeyondLoginViewController ()@end@implementation BeyondLoginViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // 設定password框 為星號    _password.secureTextEntry = YES;}// 點擊返回button,返回到前一個控制器- (IBAction)backToHome:(UIBarButtonItem *)sender{    // 關鍵代碼,關閉自身這個modal模態對話方塊    [self dismissViewControllerAnimated:YES completion:^{        NSLog(@"BeyondLogin控制器,消失了");    }];}// 向server提交使用者名稱和password- (IBAction)submit:(UIButton *)sender {    // 如同 JS 表單驗證    if (_username.text.length == 0 || _password.text.length == 0) {        // <#(id<UIActionSheetDelegate>)#>        UIActionSheet *actionSheet = [[UIActionSheet alloc]initWithTitle:@"請輸入使用者名稱和password" delegate:nil cancelButtonTitle:@"取消" destructiveButtonTitle:@"紅色警告" otherButtonTitles:@"其它button", nil];        // 如同toast,手動顯示        [actionSheet showInView:self.view];                // 直接返回        return;    }        // 傳遞資料 給上一個控制器    /*    // 方式1,耦合性太強,直接得到彈出自己的那一個(上一個)控制器    BeyondViewController *preVC = (BeyondViewController *)self.presentingViewController;            // 這樣就能夠設定上一個控制 器的Label了    preVC.welcomeLabel.text = _username.text;    [self dismissViewControllerAnimated:YES completion:nil];    */        // 方式2,使用代理 ,調用代理 的方法,並將當前控制器的輸入的使用者名稱,作為參數,傳遞給代理的這種方法裡,供代理去使用    [self.delegate doSomethingWithLoginName:_username.text];    [self dismissViewControllerAnimated:YES completion:nil];}@end



Modal模態對話方塊--------通過storyboard方式實現




著作權聲明:本文部落格原創文章,部落格,未經同意,不得轉載。

iOS_16_開關控制器_modal_代碼方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.