国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

2019-10-21 18:56:40
字體:
供稿:網(wǎng)友
這篇文章主要介紹了iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
 

Modal簡單介紹
一、簡單介紹

除了push之外,還有另外一種控制器的切換方式,那就是Modal

任何控制器都能通過Modal的形式展?出來

Modal的默認(rèn)效果:新控制器從屏幕的最底部往上鉆,直到蓋住之前的控制器為?

二、代碼說明

新建一個(gè)項(xiàng)目,在Application的代理中添加window和控制器。

YYAppDelegate.m文件

復(fù)制代碼代碼如下:

//
//  YYAppDelegate.m
//  01-modal
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

 

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //1.創(chuàng)建window,并設(shè)置window的frame
    self.window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    //2.設(shè)置window的背景顏色為黑色
    self.window.backgroundColor=[UIColor blackColor];

    
    //創(chuàng)建一個(gè)導(dǎo)航控制器作為子控制器
    YYViewController *one=[[YYViewController alloc]init];
    self.window.rootViewController=one;
    
    //3.設(shè)置window為主窗口,并顯示
    [self.window makeKeyAndVisible];
    return YES;
}


@end


打開modal窗口

 

YYViewController.m文件

復(fù)制代碼代碼如下:

//
//  YYViewController.m
//  01-modal
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

 

#import "YYViewController.h"
#import "YYtwoViewController.h"

@interface YYViewController ()
//當(dāng)點(diǎn)擊的時(shí)候,跳轉(zhuǎn)到第二個(gè)界面
- (IBAction)jump2two:(UIButton *)sender;

@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


- (IBAction)jump2two:(UIButton *)sender {
    //創(chuàng)建一個(gè)新的modal并彈出
    YYtwoViewController *two=[[YYtwoViewController alloc]init];
    //在two上用導(dǎo)航控制器包裝,讓彈出的模態(tài)窗口有一個(gè)導(dǎo)航欄可以放返回按鈕
    UINavigationController *nvc=[[UINavigationController alloc]initWithRootViewController:two
                                 ];
    [self presentViewController:nvc animated:YES completion:^{
        NSLog(@"彈出一個(gè)模態(tài)窗口");
    }];
    
}
@end


移除modal視圖

 

YYtwoViewController.m文件

復(fù)制代碼代碼如下:

//
//  YYtwoViewController.m
//  01-modal
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

 

#import "YYtwoViewController.h"

@interface YYtwoViewController ()

@end


復(fù)制代碼代碼如下:

@implementation YYtwoViewController

 

- (void)viewDidLoad
{
    [super viewDidLoad];

    //給導(dǎo)航條添加一個(gè)返回按鈕
    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(change)];
}

-(void)change
{
    //編寫點(diǎn)擊返回按鈕的點(diǎn)擊事件
    //點(diǎn)擊返回按鈕,移除當(dāng)前模態(tài)窗口
//    [self.navigationController dismissViewControllerAnimated:YES completion:^{
//        NSLog(@"移除模態(tài)窗口");
//    }];
    
// 如果一個(gè)控制器是以模態(tài)的形式展現(xiàn)出來的, 可以調(diào)用該控制器以及該控制器的子控制器讓讓控制器消失
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"移除");
    }];
}

@end


三、注意點(diǎn)

 

(1)modal的特點(diǎn):當(dāng)modal窗口彈出(從下往上)的時(shí)候,后面的視圖不可點(diǎn) 
(2)彈出控制器的視圖(通過這種方式只能彈出一個(gè)視圖)

復(fù)制代碼代碼如下:

//創(chuàng)建一個(gè)新的modal并彈出
    YYtwoViewController *two=[[YYtwoViewController alloc]init];
    //在two上用導(dǎo)航控制器包裝,讓彈出的模態(tài)窗口有一個(gè)導(dǎo)航欄可以放返回按鈕
    UINavigationController *nvc=[[UINavigationController alloc]initWithRootViewController:two
                                 ];
    [self presentViewController:nvc animated:YES completion:^{
        NSLog(@"彈出一個(gè)模態(tài)窗口");
    }];

(3)移除控制器的視圖(兩種方式都可以)
復(fù)制代碼代碼如下:

//編寫點(diǎn)擊返回按鈕的點(diǎn)擊事件
    //點(diǎn)擊返回按鈕,移除當(dāng)前模態(tài)窗口
//    [self.navigationController dismissViewControllerAnimated:YES completion:^{
//        NSLog(@"移除模態(tài)窗口");
//    }];
    
// 如果一個(gè)控制器是以模態(tài)的形式展現(xiàn)出來的, 可以調(diào)用該控制器以及該控制器的子控制器讓讓控制器消失
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"移除");
    }];

4)提示在實(shí)際的開發(fā)中,如果控制器之間的關(guān)系緊密一般用導(dǎo)航控制器,如果控制器之間的關(guān)系不是很緊密就用modal
 
四、內(nèi)部機(jī)制
(1)彈出之后,window上面只有一個(gè)子視圖。
(2)雖然當(dāng)前界面上展示在我們眼前的時(shí)twoview,但是window的根控制器仍然是NJviewController,它并沒有切換window的根控制器,而僅僅只是換了window上面顯示的視圖。
(3)移除的視圖并沒有銷毀,因?yàn)榭刂破鞑]有銷毀,所以控制器對(duì)應(yīng)的view也沒有銷毀。
(4)在模態(tài)彈出(完全顯示后),在方法中傳入two作為參數(shù),默認(rèn)就有一個(gè)控制器強(qiáng)引用著它。
(5)當(dāng)向下移除之后,只要調(diào)用了控制器的dismiss方法讓窗口關(guān)閉,modal就釋放了。
(6)通常彈出的模態(tài)窗口都會(huì)提供一個(gè)導(dǎo)航條,讓界面擁有導(dǎo)航條的最快的方式是給它包裝一個(gè)導(dǎo)航控制器。
(7)如果一個(gè)控制器是以模態(tài)的形式展現(xiàn)出來的。可以調(diào)用該控制器以及該控制器的子控制器,讓該控制器消失。
 
五、數(shù)據(jù)的傳遞

 

項(xiàng)目文件結(jié)構(gòu)和storyboard

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

代碼示例:

YYViewController.m文件

復(fù)制代碼代碼如下:

//
//  YYViewController.m
//  02-模態(tài)窗口的數(shù)據(jù)傳遞
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

 

#import "YYViewController.h"
#import "YYtwoViewController.h"

@interface YYViewController ()

@end


復(fù)制代碼代碼如下:

@implementation YYViewController

 

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}


/*
 如果控制器之間的關(guān)系比較緊密一般用 UINavigationController
 如果控制器之間的關(guān)系不是很緊密可以用Modal
 */

//通過segue跳轉(zhuǎn)前,會(huì)調(diào)用這個(gè)方法,在這個(gè)方法中把數(shù)據(jù)傳遞給彈出來的模態(tài)窗口
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    //拿到目標(biāo)控制器
    UINavigationController *nav=segue.destinationViewController;
    YYtwoViewController *two=(YYtwoViewController *)nav.topViewController;
    //傳遞數(shù)據(jù)
    two.name=@"文頂頂";
}
@end


YYtwoViewController.h文件
復(fù)制代碼代碼如下:

//
//  YYtwoViewController.h
//  02-模態(tài)窗口的數(shù)據(jù)傳遞
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

 

#import <UIKit/UIKit.h>

@interface YYtwoViewController : UIViewController
@property(nonatomic,copy)NSString *name;
@end

YYtwoViewController.m文件

//
//  YYtwoViewController.m
//  02-模態(tài)窗口的數(shù)據(jù)傳遞
//
//  Created by apple on 14-6-9.
//  Copyright (c) 2014年 itcase. All rights reserved.
//

#import "YYtwoViewController.h"

@interface YYtwoViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nametext;

@end


復(fù)制代碼代碼如下:

@implementation YYtwoViewController

 


- (void)viewDidLoad
{
    [super viewDidLoad];
    self.nametext.text=self.name;
    
    //為導(dǎo)航欄添加一個(gè)返回按鈕
    self.navigationItem.leftBarButtonItem=[[UIBarButtonItem alloc]initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(black)];
}

-(void)black
{
    //移除模態(tài)窗口
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"成功移除!");
    }];
}
@end

 


APP主流UI框架結(jié)構(gòu)

一、簡單示例

說明:使用APP主流UI框架結(jié)構(gòu)完成簡單的界面搭建

搭建頁面效果:

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

二、搭建過程和注意點(diǎn)

1.新建一個(gè)項(xiàng)目,把原有的控制器刪除,添加UITabBarController控制器作為管理控制器

2.對(duì)照界面完成搭建

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

3.注意點(diǎn):

(1)隱藏工具條:配置一個(gè)屬性,Hideabotton bar在push的時(shí)候隱藏底部的bar在那個(gè)界面隱藏,就在哪個(gè)界面設(shè)置。

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

(2).cell可以設(shè)置行高

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

(3)連線

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

(4)說明:在上面的頁面搭建中直接使用了靜態(tài)單元格,但在實(shí)際開發(fā)中,通常不這么做。
(5)在tableview中添加headerview(顯示一根藍(lán)線) 
三、 APP主流UI框架結(jié)構(gòu)

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

請(qǐng)問:UITabBarController和導(dǎo)航控制器的在結(jié)構(gòu)中的位置能否互調(diào)?(一個(gè)導(dǎo)航條)

設(shè)置控制器關(guān)聯(lián)或出現(xiàn)問題,tableviewcontroller默認(rèn)實(shí)現(xiàn)了數(shù)據(jù)源的方法,兩個(gè)控制器把它反過來管理。關(guān)于導(dǎo)航條。導(dǎo)航條上顯示什么內(nèi)容由棧頂控制器來確定,下面的導(dǎo)航條只有一個(gè)(棧頂控制器就是tabbar控制器)。
補(bǔ)充說明:ios7全屏化的設(shè)計(jì)
打印ios7中控制器的層次結(jié)構(gòu):

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹

打印ios6中控制器的層次結(jié)構(gòu):

iOS的UI開發(fā)中Modal的使用與主流應(yīng)用UI結(jié)構(gòu)介紹



注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 华坪县| 武邑县| 繁昌县| 民和| 丹东市| 金湖县| 宁强县| 鄂尔多斯市| 南昌市| 库尔勒市| 云阳县| 报价| 孙吴县| 上栗县| 余姚市| 巩义市| 竹山县| 崇阳县| 平原县| 修武县| 商水县| 米林县| 灌阳县| 迭部县| 佳木斯市| 兴国县| 灵川县| 嘉鱼县| 越西县| 连云港市| 定西市| 海南省| 晋江市| 鄂托克旗| 涞源县| 化州市| 长武县| 阿拉尔市| 湖州市| 调兵山市| 平顶山市|