iOS:UI简单的总结

简介:
UI简单总结:

一、常用单例:

    NSBundle *bundel = [NSBundle mainBundle]; //加载资源

    NSFileManager *fm = [NSFileManager defaultManager];//文件管理

    UIApplication *app = [UIApplication sharedApplication];//app对象

    UIScreen *screen = [UIScreen mainScreen];//屏幕

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];//通知中心

二、常用代理:

文本框:<UITextFieldDelegate> 

文本视图: <UITextViewDelegate>

表格视图:<UITableViewDelegate>、<UITableViewDataSource>

集合视图:<UICollectionViewDelegate>、<UICollectionViewDatasource>

滚动视图:<UIScrollViewDelegate> 

搜索栏:<UISearchBarDelegate>、<UISearchDisplayDelegate>

三、视图切换方式:

1、模态窗口(modal:模态)

(1)控制器之间没有用segue联接时,获取要切换到的目的控制器和切换视图方法为:

//获取所在的故事板

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil;

//故事板对象通过目的控制器的身份标识StoryBoardID获取目的控制器

- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier; 

//在源控制器中显示目的控制器的模态窗口

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion ;

//在目的控制器中关闭当前控制器的模态窗口

- (void)dismissViewControllerAnimated:(BOOL)animated;

如下:

源控制器中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

destinationViewController *desVC= [storyboard instantiateViewControllerWithIdentifier:@“deVC”];

[self presentViewController:desVC animate:YES completion:nil];//模态出目的控制器的窗口

目的控制器中:

UIStoryBoard *storyboard = [UIStoryboard storyboardWithName:@“Main” bundle:nil];

resourceViewController *resVC = [storyboard instantiateViewControllerWithIdentifier:@“reVC”];

[self.presentingViewController dismissViewControllerAnimated:YES];//当前控制器关闭模态窗口

或者 (如果写self调用该方法,默认是self.presentingViewController调用该方法)

[self dissmissViewControllerAnimated:YES]

(2)控制器之间通过segue联接时,获取要切换到的目的控制器并切换视图方法为:在故事板中首先给segue设置identifier标识,然后再使用以下方法。

//触发某个事件时,可以直接根据segue的identifier跳转到目的控制器界面

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender;

//可以重写该方法,视图切换时,会自动调用该方法,可以用来正向传数据,也可以获取到目的控制器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

 

如下:

通过segue连接目的控制器后,假如segue的identifier的标识符为deVC,跳转视图为:

  [self performSegueWithIdentifier:deVC sender:self];//切换到目的控制的视图

视图切换时,重写该方法获取目的控制器和传数据,仍假如segue的identifier的标识符为deVC

-(void)prepareForSugue:(UIStoryboardSegue *)identifier sender:(id)sender

{

    if([segue.identifier isEqualToString:deVC])

    {

    destinationViewController *desVC = segue.destinationViewController;//获取目的控制器

    desVC.info = self.TextField.text;//将当前控制器的数据传到目的控制器中

    }

}

  

2、UINavigationController(push:入栈  pop:出栈):导航栏控制器

前提是必须先存在UINavigationController控制器容器,然后在它的底部添加一个根控制器,作为第一个显示的视图,如果接着显示其他视图,就将目的控制器压入栈即可,反之推出栈。

(1)控制器之间没有用segue联接时,获取要切换到的目的控制器和切换视图方法为:

//获取所在的故事板

+ (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil;

//故事板对象通过目的控制器的身份标识StoryBoardID获取目的控制器

- (id)instantiateViewControllerWithIdentifier:(NSString *)identifier; 

//将目的控制器压入栈,即显示目的控制器视图

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; 

//将栈顶控制器推出栈,即显示它的前一个控制器的视图

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

//返回指定的子控制器(即将它上面的控制器都推出栈,显示它的视图)

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; 

//返回根控制器(显示栈底的控制器的视图)

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated; 

如下:

源控制器中:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

destinationViewController *desVC= [storyboard instantiateViewControllerWithIdentifier:@“deVC”];

[self.navigationController pushViewController:deVC animate:YES];//将目的控制器压入栈中,即显示

目的控制器中:

[self.navigationController popViewControllerAnimated:YES];//将当前显示的视图的控制器推出栈中,即显示上一个控制器的视图

(2)控制器之间通过segue联接时,获取要切换到的目的控制器并切换视图方法为:在故事板中首先给segue设置identifier标识,然后再使用以下方法。

//触发某个事件时,可以直接根据segue的identifier跳转到目的控制器界面

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender;

//可以重写该方法,视图切换时,会自动调用该方法,可以用来正向传数据,也可以获取到目的控制器

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

 

如下: 

通过segue连接目的控制器后,假如segue的identifier的标识符为deVC,跳转视图为:

  [self performSegueWithIdentifier:deVC sender:self];//切换到目的控制的视图

视图切换时,重写该方法获取目的控制器和传数据,仍假如segue的identifier的标识符为deVC

-(void)prepareForSugue:(UIStoryboardSegue *)identifier sender:(id)sender

{

    if([segue.identifier isEqualToString:deVC])

    {

    destinationViewController *desVC = segue.destinationViewController;//获取目的控制器

    desVC.info = self.TextField.text;//将当前控制器的数据传到目的控制器中

    }

}

3、UITabBarController:标签栏控制器 

•通过设置viewControllers属性或者addChildViewController方法可以添加子控制器
–NSArray *viewControllers
–- (void)addChildViewController:(UIViewController *)childController

 

•UIViewController的tabBarItem属性决定了UITabBar显示的内容
–使用系统自带的UITabBarItem样式:

controller.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemSearch tag:1] autorelease];

–自己设置UITabBarItem的标题和图片:

controller.tabBarItem.title = @”More”; 

// controller.title也可以用于设置标题

controller.tabBarItem.image = [UIImage imageNamed:@”more”];

–设置UITabBarItem右上角的红色数字

controller.tabBarItem.badgeValue = @”10”;

 

纯代码将下面的三个控制器加入tabBarController中,有如下两种方式:

    //[tabBarController addChildViewController:firstVC];

      //[tabBarController addChildViewController:secondVC];

      //[tabBarController addChildViewController:threeVC];

 或者:

      tabBarController.viewControllers = @[firstVC,secondVC,threeVc];

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!


本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4808135.html,如需转载请自行联系原作者
目录
相关文章
|
自然语言处理 iOS开发 C++
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
本文总结提炼了Alibaba.com App的瘦身的技术和策略,系统化地介绍APP瘦身的业务价值、分析技术、瘦身技术、防劣化机制,让读者可以系统化地了解APP瘦身的技术体系。并基于实践经验,介绍各种瘦身技术的ROI,让读者可以避免踩雷,将资源浪费在效果不佳的技术上。希望对你有所帮助。
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
|
存储 缓存 算法
iOS 常见触发离屏渲染场景及优化方案总结
iOS 常见触发离屏渲染场景及优化方案总结
885 0
iOS 常见触发离屏渲染场景及优化方案总结
|
JSON 自然语言处理 编译器
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
前言包大小是衡量APP性能的一项重要指标,它直接影响用户的下载点击率(包太大不想下)、下载安装成功率(下载慢不用了)、APP卸载率(太占空间先删掉)。包大小的计算逻辑很简单,它是各种类型的文件占用磁盘大小相加。APP瘦身的技术却很复杂,代码文件的复杂度和编译器策略决定了可执行文件的大小,业务功能和工程架构决定了代码文件的复杂度。iOS APP瘦身,需要掌握的技能有XCode构建技术、LLVM编译器
3718 0
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
|
3月前
|
测试技术 Swift iOS开发
探索iOS自动化测试:使用Swift编写UI测试
【8月更文挑战第31天】在软件开发的海洋中,自动化测试是保证船只不偏离航线的灯塔。本文将带领读者启航,深入探索iOS应用的自动化UI测试。我们将通过Swift语言,点亮代码的灯塔,照亮测试的道路。文章不仅会展示如何搭建测试环境,还会提供实用的代码示例,让理论知识在实践中生根发芽。无论你是新手还是有经验的开发者,这篇文章都将是你技能提升之旅的宝贵指南。
|
机器学习/深度学习 安全 测试技术
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
阿里云EMAS测试专家有着集团内部多个日活过亿规模APP经验,提供EMAS专家测试,客户只需提交测试需求,从用例设计、脚本录制、海量机型测试、整理测试结果、48小时输出专家测试报告均由阿里云EMAS测试专家一站式服务完成。覆盖功能测试、深度兼容测试、性能测试、UI适配测试以及隐私合规检测等,帮助用户以更低成本获得高质量的全面测试能力,可用于APP正式发版前验收,规避手机APP上线前或发版过程中各类隐患。
521 0
阿里云EMAS-专家测试服务iOS和Android上百种机型性能、兼容及UI等测试
|
物联网 Android开发 iOS开发
iOS开发 - 蓝牙学习的总结
iOS开发 - 蓝牙学习的总结
185 0
|
安全 iOS开发 开发者
iOS 6版本与之前版本差异总结
iOS 6版本与之前版本差异总结
126 0
|
程序员 API iOS开发
iOS开发:个人对于textView基础用法的总结(其一)
从事了这么久ios开发,对于textView的使用并不陌生,它和textfield有相似的地方,也有不同的地方,这里只对textView的一些基础用法进行描述,textfield不在这里描述。
335 0
|
jenkins 测试技术 macaca
iOS UI 自动化测试原理以及在 Trip.com 的应用实践
笔者入职 Trip.com 已满一年,回顾这一年的工作历程,约一半的时间都在做 UI 自动化测试相关内容。从而,笔者更深入地研究了 iOS 平台下的自动化测试技术,目前也在负责部门 App 自动化测试平台的搭建和维护。故想借这篇文章一并将所踩过的坑以及学习到的技术,系统且全面地整理出分享给大家。
387 0
iOS UI 自动化测试原理以及在 Trip.com 的应用实践
|
设计模式 缓存 编解码
2020年iOS大厂面试题总结
2020年iOS大厂面试题总结
456 0