`
吃饱了就饿
  • 浏览: 68771 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

UINavigation笔记---ios

    博客分类:
  • IOS
阅读更多

Navigation:导航控制器
导航控制器的作用:继承自UIViewController,以栈的方式管理视图控制器。
栈:相当于一个数组,每个视图控制器放入数组中,后进先出的顺序出入栈。每次屏幕上只显示位于栈顶端的视图。导航控制器所控制的视图控制器之间是主细关系(分层关系)。
导航控制器的根视图:位于栈底的一个视图控制器,其特点是可被代替但不可被弹出。
**根视图的设置
- (id)initWithRootViewController:(UIViewController *)rootViewController;
(UIViewController *)rootViewController:设置此视图控制器为根视图,存在栈底
**单个视图的入栈(压栈)
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
(UIViewController *)viewController:要入栈的视图控制器
(BOOL)animated:入栈时是否有动画效果
**单个视图的出栈(弹栈
- (UIViewController *)popViewControllerAnimated:(BOOL)animated;
(BOOL)animated:对当前视图弹栈时是否显示动画
该方法将返回弹出的视图控制器
**多个视图的入栈(压栈)
- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated;
(NSArray *)viewControllers:将想要入栈的视图存入一个数组中从最后一个元素开始顺序入栈,只显示数组中firstObject因为他在栈的最顶端
(BOOL)animated:入栈时是否有动画效果
**多个视图的出栈(弹栈)
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL);
(UIViewController *)viewController:显示此视图,此视图控制器之上的视图被均弹出
animated:(BOOL):对当前视图显示时是否显示动画
该方法将被弹出的视图存入一个数组中,栈中顶端的视图在数组的第一个,以此类推
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
(BOOL)animated:对当前视图显示时是否显示动画
该方法将根视图以外的视图全部弹出存入一个数组中,栈中顶端的视图在数组的第一个,以此类推
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
导航控制器的设置:

  1. 设置四个视图控制器AViewController   BViewController  CViewController  DViewController
  2. AViewController*avc=[[AViewController alloc]init];//初始化A视图
  3. UINavigationController*nc=[[UINavigationController alloc]initWithRootViewController:avc];//初始化nc,将A视图设为根视图
    self.window.rootViewController=nc;
  4. 在A中设置一个UITextField MyTextField1(设为属性)  UIButton Mybutton1
    在B中设置一个UITextField MyTextField2(设为属性)  UIButton Mybutton2
    在C中设置一个UITextField MyTextField3(设为属性)  UIButton Mybutton3
    在D中设置一个UITextField MyTextField4(设为属性)  UIButton Mybutton4

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
视图之间的传参:属性,单例,代理
**一般由主到细传值用属性传值(因为持有了细的对象)
**一般由细到主回传时用代理(因为没持有主的对象)
**单例可以来回传,但是因为单例在内存中永远存在占内存过多,所以一般不用单例(虽然细不持有主的对象但可以通过单例创建相同的对象)
属性传值:
A->B
将B的头包进A
#import "BViewController.h"
给Mybutton1写触发方法
-(void)passToB:(UIButton*)sender
{
    BViewController*bvc=[[BViewController alloc]init];//在A上初始化B
   
   
    [self.navigationController pushViewController:bvc animated:YES];//B入栈
    //通过属性  因为A已持有B的实例所以可以拿到B的属性(这里是要把输入框写成属性的原因)
    bvc.Myfield2.text=self.Myfield1.text;//将A的值传给B
}


单例传值:
B->A
将A的头包进B
#import "AViewController.h"
通过B来改A的值,则B需要拿到A的对象,但B并不持有A,若在B上初始化A获得的是一个新的对象,所以要将A写为单例,这样通过单例方法创建的对象都是同一个对象(指相同一块内存)
$$要改谁的值将谁设成单例$$
static AViewController* avc;
+(AViewController*)Avvc
{
    if (!avc)
    {
        avc=[[AViewController alloc]init];
    }
    return avc;
}

给Mybutton2写触发方法
-(void)passToA:(UIButton*)sender
{
    [self.navigationController popViewControllerAnimated:YES];
   
    AViewController*avc=[AViewController Avvc];//通过单例方法创建A
    avc.Myfield1.text=self.Myfield2.text;//将B的值传给A
}


协议传值:
B->A
B不持有A的对象所以要用协议来让A作为B的代理来改自己的值
B想做的事做不了,就将想做的事写成方法(协议),就让A(代理)去做
改谁的值,谁做代理
这里

  1. 在B上设置协议                                                                                 @protocol Passtxt <NSObject>//第B页定义一个协议
    -(void)changeValue:(NSString*)txt;//参数代表想要通过B传回给A的数据
    @end
  2. 在B上定义一个属性存代理对象
    @property(assign,nonatomic)id<Passtxt>delegate;//指定代理
  3. 在A上将B的头加上#import"BViewController.h"并且加上<Passtxt>标示其遵守此协议
  4. 在A的.h上实现此方法                                                                                          -(void)changeValue:(NSString*)txt
    {
        self.Myfield1.text=txt;//值赋给A}
  5. 在A上指定其为代理(在A上B初始化的地方指定A为代理):

        在A将B入栈的方法中添加以下语句       
        bvc.delegate=self; 
       -(void)passToB:(UIButton*)sender
       {
          BViewController*bvc=[[BViewController alloc]init];//在A上初始化B
          [self.navigationController pushViewController:bvc animated:YES];//B入栈
          //通过属性  因为A已持有B的实例所以可以拿到B的属性(这里是要把输入框写成属性的原因)
          bvc.Myfield2.text=self.Myfield1.text;//将A的值传给B
          bvc.delegate=self;  //设A为B的代理
      }
    6. 在B上通过代理调用A上的代理方法
     -(void)passToA:(UIButton*)sender
    {
       [self.navigationController popViewControllerAnimated:YES];//将自己弹出栈
       [self.delegate changeA:self.Myfield2.text];//通过协议改B值(此时的self.delegate指向A代表A)
    }
   B将自己的值作为参数传到方法中,方法在A上实现改自己的值

1
0
分享到:
评论

相关推荐

    UINavigation-SXFixSpace:导航栏按钮位置更改的解决方案,兼容iOS7〜iOS13,可自定义间距

    UINavigation-SXFixSpace 导航栏按钮位置偏移的解决方案,兼容iOS7〜iOS13,可自定义间距 添加支持cocoapods, pod "UINavigation-SXFixSpace", "~&gt; 1.2.4

    ios-iOS11导航栏item适配.zip

    一行代码调用,实现左侧返回item,右侧一个、两个、三个、四个item ...所以借鉴了UINavigation-SXFixSpace里边的几个分类。 demo位置:https://github.com/zhaotao0617/ZTNavigationItem/tree/master

    (0012)-iOS/iPhone/iPAD/iPod源代码-导航条(Navigation Bar)-Wood UINavigation

    在iOS5.0以上版本,要想navigation bar上面也能显示木质图片,要更改“WoodUINavigationAppDelegate.m”文件的一段代码:[navigationController.navigationBar insertSubview:imageView atIndex:0];改成:...

    IOS iphone UINavigation 导航 简单例子

    标题“IOS iPhone UINavigation 导航简单例子”所指的就是如何在iPhone应用中使用`UINavigationController`来实现这种常见的导航模式。`UINavigation`是iOS SDK中的核心导航服务,它允许用户通过点击屏幕顶部的标题...

    ios-XLBubbleTransition.zip

    适用于UINavigation的Push和Pop动作 一行代码即可设置动画。 GitHub地址:https://github.com/mengxianliang/XLBubbleTransition

    BaseViewController 隐藏显示导航,避免判断是否为iOS7-OC

    在iOS应用开发中,`BaseViewController`是一种常见的做法,它是一个基类,通常用来封装一些通用的功能,以减少代码重复,提高代码复用性。在这个特定的案例中,`BaseViewController`是用Objective-C(OC)编写的,...

    OC-UINavigation自定义导航栏

    在iOS应用开发中,`UINavigationController` 是一个关键的组件,它管理着一系列的 `UIViewController`,并提供了屏幕之间的导航。然而,系统默认的导航栏样式有时无法满足开发者们对界面设计的个性化需求,这时我们...

    pan手势 pop效果 UINavigation

    在iOS开发中,UINavigationController是苹果提供的一种导航控制器,它管理着一个堆栈式的视图控制器序列,通常用于实现类似iOS系统应用中的“前进”和“后退”的操作。在这个项目"pan手势 pop效果 UINavigation"中,...

    自定义UINavigation

    在iOS应用开发中,UINavigation是苹果iOS SDK中的一个核心组件,主要用于实现导航控制器(UINavigationController)的功能,它提供了一种在多个视图之间进行层级导航的方法。自定义UINavigation通常是为了实现更个性...

    UITabBar和UINavigation组合使用

    本文将详细介绍如何在iOS应用中组合使用 `UITabBar` 和 `UINavigation`。 首先,我们需要了解 `UITabBar` 的基本概念。`UITabBar` 是 iOS 系统提供的底部导航栏,通常包含多个图标或文字标签,用户点击不同的图标...

    CATransition uinavigation跳转方法

    在iOS开发中,页面间的跳转是用户交互的重要部分,CATransition是Core Animation框架中用于实现动画效果的一个类,它可以让我们在导航控制器(UINavigationController)之间的页面切换时添加丰富的过渡效果,提升用户...

    斯坦福大学公开课:iOS 7应用开发 中英文字幕)1 18全

    Polymorphism with Controllers, UINavigation, UITabBar.ass":这部分可能涉及面向对象编程的多态性,以及如何在UIViewController、UINavigationController和UITabBarController之间进行交互,这些都是iOS中常见的...

    pan UINavigation

    在iOS开发中,UINavigationController是苹果提供的一种容器控制器,它管理着一个堆栈式的视图控制器序列,使得用户可以通过导航栏进行前进和后退操作。本文将深入探讨如何自定义UINavigationController,特别是实现...

    swift_3 swift之UITableView和UINavigation视图控制器

    在Swift编程中,UITableView和UINavigationController是两个非常关键的组件,它们构成了iOS应用中的许多界面。这篇文章将深入探讨这两个组件的使用以及它们如何协同工作。 首先,UITableView是iOS开发中最常用的...

    纯代码搭建iOS三级结构(UITabbarController+UINavigationController+UIViewController)

    在iOS应用开发中,构建一个层次清晰、交互流畅的用户界面是至关重要的。这个话题将深入探讨如何使用纯代码方式来搭建一个包含三级结构的UI,即`UITabBarController` + `UINavigationController` + `UIViewController...

    IOS修改导航栏高度demo

    IOS修改导航栏高度demo,项目非常简单简洁,方便大家参考如何正确地修改UINavigationController中的MyNavigationBar高度,博客地址https://blog.csdn.net/u010775335/article/details/86176848

    iphone开发基础UITabBar和UINavigation搭建简单应用

    iphone开发基础UITabBar和UINavigation搭建简单应用,适合初学者,学习tabbar和navigation,这里练习两者组合搭建一个简单的常见应用例子, 其实普通应用也就是tabbar作为根视图,每个tab又是一个navigation的根...

    IOS UINavigationBarItem设置

    在iOS应用开发中,`UINavigationBarItem` 是一个至关重要的组件,它位于 `UINavigationController` 的导航栏上,用于展示应用程序中的导航元素,如标题、返回按钮和其他自定义视图。`UINavigationBarItem` 提供了对...

    Object-c模仿系统相册,适合新手

    【描述】:“平时写的小东西,适合新手,实现系统部分功能,可供参考,UIScrollView,uiimageView与UINavigation等的综合小项目。” 这个项目将涵盖多个关键的UIKit组件,包括: 1. **UIScrollView**:...

Global site tag (gtag.js) - Google Analytics