美文网首页
IOS学习之页面切换与传值

IOS学习之页面切换与传值

作者: 白令海峡 | 来源:发表于2016-10-23 14:38 被阅读37次
    • 传值有以下几种方式:

    • 1、采用代理模式(本文使用)

    • 2、采用IOS消息机制

    • 3、通过NSDefault存储

    • 4、单例模式

    • 5、控制器属性(本文使用)

    • 页面切换方式:

    • 1、模态方式(本文使用)

    • 2、SwitchViewController

    • 3、UITabBarController

    • 4、UINavigationController

    PS:由于我入行较浅,很多叫法不是很专业.....勿怪勿怪

    • 页面切换
    • 首先,在StoryBoard中创建两个View视图并且与相应的View Controller绑定,然后填上StoryBoard ID方便获取对象
    屏幕快照 2016-10-20 上午10.25.10.png
    • 其次,两个View视图中按钮和label连线到各自的View Controller中

    • 第一页,在按钮响应事件中,跳转到第二页

      //按键响应事件
      -(void)page1Click{
        
        /******使用模态实现页面的切换*****/
        //创建页面对象,通过加载storyboard,当然如果你想用alloc init方法创建页面对象,那么控制器中的组件需要通过代码方式添加
        Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"];
        
        //调用presentViewController方法切换到第二页
        [self presentViewController:page2View animated:YES completion:nil];
      }
      
      
    • 第二页,在按钮响应事件中,返回到第一页

          //按键响应事件
          -(void)page2Click{
            /******模态页面切换*******/
            //直接消除该页,也就是返回前一页
            [self dismissViewControllerAnimated:YES completion:nil];
        }
      
    ***
    ##### 以上就完成了页面切换,接下去先看控制器属性传值,也就是第一页切换至第二页的正向传值
    - 先在第二页的.h文件里面新建一个属性
    
    

    import <UIKit/UIKit.h>

    @interface Page2ViewController : UIViewController

    //设置Page2ViewController的公共参数
    @property (nonatomic,strong)NSString *valueFromPage1;

    @end

    - 在第一页.m的按键响应处
    
    
      //按键响应事件
      -(void)page1Click{
    
        /******使用模态实现页面的切换*****/
        //创建页面对象,通过加载storyboard,当然如果你想用alloc init方法创建页面对象,那么控制器中的组件需要通过代码方式添加
        Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"];
    
        NSLog(@"%@",self.page1_input.text);
    
        //利用控制器公共属性传值
        page2View.valueFromPage1 = self.page1_input.text;
    
        //调用presentViewController方法切换到第二页
         [self presentViewController:page2View animated:YES completion:nil];
    }
    
    
    - 第二页调用属性,完成第一页到第二页的传值
    
    
      - (void)viewDidLoad {
          [super viewDidLoad];
          NSLog(@"------>>>etner page2");
          //绑定按键响应事件
          [self.page2_btn addTarget:self action:@selector(page2Click) forControlEvents:UIControlEventTouchUpInside];
         //调用属性
         self.page2_receive.text = self.valueFromPage1;
      }
    
    
    ***
    #####使用代理传值,从第二页反向传递到第一页
    - step1:在第一页.h文件中定义一个协议和传输函数
    - step2:在第一页.m文件中实现代理
    - step3:在第一页.m文件中实现代理的方法
    - step4:在第二页.h文件中声明协议
    - step5: 在第二页.h文件中创建一个id<MyViewDelegate>类型的delegate公共属性
    - step6:在第一页.m文件按钮响应函数中将第一页的self赋值给第二页创建的delegate
    - step7:在第二页.m文件按钮响应函数中使用self.delegate调用代理方法,并且传入数值
    
    第一页.h
    

    import <UIKit/UIKit.h>

    //step1----------------->>>>>>>>>定义代理协议

    pragma mark 定义一个协议用于参数传递

    @protocol MyViewDelegate
    -(void)passValue:(NSString *) code;
    @end

    @interface ViewController : UIViewController

    @end

    
    第一页.m
    

    import "ViewController.h"

    import "Page2ViewController.h"

    //step2--------------------->>>>>>>>实现代理
    @interface ViewController ()<MyViewDelegate>

    @property (weak, nonatomic) IBOutlet UITextField *page1_input;

    @property (weak, nonatomic) IBOutlet UILabel *page1_receive;

    @property (weak, nonatomic) IBOutlet UIButton *page1_btn;

    @end

    @implementation ViewController

    • (void)viewDidLoad {
      [super viewDidLoad];
      // Do any additional setup after loading the view, typically from a nib.

      //按键绑定响应事件
      [self.page1_btn addTarget:self action:@selector(page1Click) forControlEvents:UIControlEventTouchUpInside];

    }

    //按键响应事件
    -(void)page1Click{

    /******使用模态实现页面的切换*****/
    //创建页面对象,通过加载storyboard,当然如果你想用alloc init方法创建页面对象,那么控制器中的组件需要通过代码方式添加
    Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"];
    
    NSLog(@"%@",self.page1_input.text);
    
    
    //利用控制器公共属性传值
    page2View.valueFromPage1 = self.page1_input.text;
    
    
    //step6--------------------->>>>>>>>讲page2ViewController中delegate赋值page1ViewController,让Page2可以通过delegate操作page1中的代理方法
    page2View.delegate = self;
    
    //调用presentViewController方法切换到第二页
    [self presentViewController:page2View animated:YES completion:nil];
    

    }

    //step3--------------------->>>>>>>>实现代理方法
    -(void)passValue:(NSString *)code{
    self.page1_receive.text = code;

    }

    @end

    
    第二页.h
    

    import <UIKit/UIKit.h>

    //step4------------->>>>>>声明协议
    @protocol MyViewDelegate;

    @interface Page2ViewController : UIViewController

    //设置Page2ViewController的公共参数
    @property (nonatomic,strong)NSString *valueFromPage1;

    //step5-------------->>>>>>创建delegate参数
    @property (nonatomic,strong) id<MyViewDelegate> delegate;

    @end

    
    第二页.m
    

    import "Page2ViewController.h"

    import "ViewController.h"

    @interface Page2ViewController ()

    @property (strong, nonatomic) IBOutlet UITextField *page2_input;

    @property (strong, nonatomic) IBOutlet UILabel *page2_receive;

    @property (strong, nonatomic) IBOutlet UIButton *page2_btn;

    @end

    @implementation Page2ViewController

    • (void)viewDidLoad {
      [super viewDidLoad];
      NSLog(@"------>>>etner page2");
      //绑定按键响应事件
      [self.page2_btn addTarget:self action:@selector(page2Click) forControlEvents:UIControlEventTouchUpInside];

      self.page2_receive.text = self.valueFromPage1;

    }

    //按键响应事件
    -(void)page2Click{

    //step7-------------------->>>>>调用代理方法。不要忘记在Page2中#import "ViewController.h"
    [self.delegate passValue:self.page2_input.text];
    
    /******模态页面切换*******/
    //直接消除该页,也就是返回前一页
    [self dismissViewControllerAnimated:YES completion:nil];
    

    }

    @end

    相关文章

      网友评论

          本文标题:IOS学习之页面切换与传值

          本文链接:https://www.haomeiwen.com/subject/jertuttx.html