`
百合不是茶
  • 浏览: 344422 次
社区版块
存档分类
最新评论

页面之间的普通传值和反向传值

阅读更多

页面之间的数据传递是最基本的,下面就ios页面之间的数据传递需要理解的知识点整理一下

 

1,了解委托代理

2,协议的定义和实现(java的接口,Android的页面跳转使用的是Intent 所以不需要使用接口)

3,定义空白的window等(本人觉得最难的是按照网上的方法创建工程时,有一些方法找不到,建议在这一块找一个做ios开的人员指导一下)

 

 

一:普通数据传递  (ViewController页面输入框的值传到ViewController2页面并显示在输入框中)

a,定义ViewController和ViewController2页面并添加数据框和按钮

b,添加按钮的点击事件

c,将数据通过属传递到ViewController2页面

代码实现如下:

//
//  ViewController.h
//  test1114
//
//  Created by wang on 15/11/14.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController


@end

 ViewController.m

//
//  ViewController.m
//  test1114
//
//  Created by wang on 15/11/14.
//  Copyright © 2015年 wang. All rights reserved.
//

#import "ViewController.h"
#import "ViewController2.h"

@interface ViewController ()

@property UITextField*  tf1;
@property UITextField* tf2;

@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor yellowColor];
    self.navigationItem.title=@"第一个界面";
    //姓名输入框
    _tf1= [[UITextField alloc]init];
    _tf1.frame=CGRectMake(100, 100, 200, 30);
    //设置边框
    _tf1.borderStyle=UITextBorderStyleRoundedRect;
    //设置输入框的背景颜色
    _tf1.backgroundColor=[UIColor whiteColor];
    // 设置提示语
    _tf1.placeholder=@"请输入姓名";
    [self.view addSubview:_tf1];
    [_tf1 release];
    
    //创建button
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    //butto的大小
    btn.frame = CGRectMake(20, 100, 100, 300);
    //标题
    [btn setTitle:@"next" forState:UIControlStateNormal];
    
    
    //跳转
    [btn addTarget:self action:@selector(nextA) forControlEvents:UIControlEventTouchUpInside];
    //添加到view视图中
    [self.view addSubview:btn];
    
    
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//点击事件
- (void)nextA
{
    ViewController2 *viewCtr = [[ViewController2 alloc] init];
    
    viewCtr.userNameTitle=_tf1.text;//将输入框的值传递到第二个界面
    [self.navigationController pushViewController:viewCtr animated:YES];
    [viewCtr release];
}
 
@end

 

第二个页面

//
//  ViewController2.h
//  test1114
//
//  Created by wang on 15/11/15.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <UIKit/UIKit.h>


@interface ViewController2 : UIViewController

@property(nonatomic,copy) NSString* userNameTitle;

@end

 .m文件

//
//  ViewController2.m
//  test1114
//
//  Created by wang on 15/11/15.
//  Copyright © 2015年 wang. All rights reserved.
//

#import "ViewController2.h"
#import "ViewController3.h"

@interface ViewController2 ()

@property UITextField* tf1;

@end

@implementation ViewController2

@synthesize userNameTitle=_userNameTitle;


- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.navigationItem.title=@"第二个页面";
    
    //姓名输入框
    _tf1= [[UITextField alloc]init];
    _tf1.frame=CGRectMake(100, 100, 200, 30);
    //设置边框
    _tf1.borderStyle=UITextBorderStyleRoundedRect;
    //设置输入框的背景颜色
    _tf1.backgroundColor=[UIColor whiteColor];
    // 设置提示语
    _tf1.placeholder=@"请输入姓名";
    
    _tf1.text=_userNameTitle;
    
    [self.view addSubview:_tf1];
    [_tf1 release];
   
  UIButton* btn= [UIButton buttonWithType:UIButtonTypeRoundedRect];

    btn.frame=CGRectMake(10, 200, 300, 200);
  
    [btn setTitle:@"跳转到第一个页面" forState:UIControlStateNormal];
    
    [btn addTarget:self action:@selector(ShowNext) forControlEvents:(UIControlEventTouchUpInside)];
    
    [self.view addSubview:btn];
    


    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
     
-(void)ShowNext{
    
    //点击按钮返回到上一个界面,并将输入框的参数带到上一个界面
    
    NSString* btn=_tf1.text;
    NSLog(@"%@",_tf1.text);


    //设置视图出栈
    [self.navigationController popViewControllerAnimated:YES];

    
//    ViewController3 * vc3 = [[ViewController3 alloc]init];
//    
//    [self.navigationController pushViewController:vc3 animated:YES];
//    
//    [vc3 release];
     }

@end

 

2,第二页面输入框的值传递到第一个页面

 

//
//  ViewController.h
//  test1114
//
//  Created by wang on 15/11/14.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "ViewController2.h"

/**
 实现代理,接收ViewController2代理传过来的值
 */
@interface ViewController : UIViewController<IntentFrist>


@end

 

 

//
//  ViewController.m
//  test1114
//
//  Created by wang on 15/11/14.
//  Copyright © 2015年 wang. All rights reserved.
//

#import "ViewController.h"
#import "ViewController2.h"

@interface ViewController ()

@property UITextField*  tf1;
@property UITextField* tf2;

@end


@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor yellowColor];
    self.navigationItem.title=@"第一个界面";
    //姓名输入框
    _tf1= [[UITextField alloc]init];
    _tf1.frame=CGRectMake(100, 100, 200, 30);
    //设置边框
    _tf1.borderStyle=UITextBorderStyleRoundedRect;
    //设置输入框的背景颜色
    _tf1.backgroundColor=[UIColor whiteColor];
    // 设置提示语
    _tf1.placeholder=@"请输入姓名";
    [self.view addSubview:_tf1];
    [_tf1 release];
    
    //创建button
    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    //butto的大小
    btn.frame = CGRectMake(20, 100, 100, 300);
    //标题
    [btn setTitle:@"next" forState:UIControlStateNormal];
    
    
    //跳转
    [btn addTarget:self action:@selector(nextA) forControlEvents:UIControlEventTouchUpInside];
    //添加到view视图中
    [self.view addSubview:btn];
    
    
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//点击事件
- (void)nextA
{
    ViewController2 *viewCtr = [[ViewController2 alloc] init];
    
    viewCtr.userNameTitle=_tf1.text;//将输入框的值传递到第二个界面
    viewCtr.delegate=self;
    [self.navigationController pushViewController:viewCtr animated:YES];
    [viewCtr release];
}

#pragma mark -实现协议,并接收传值
-(void)getUserNameTitle:(NSString *)userNameTitle{

    NSLog(@"%@",userNameTitle);
    _tf1.text=userNameTitle;

}

@end

 

第二个页面

  

//
//  ViewController2.h
//  test1114
//
//  Created by wang on 15/11/15.
//  Copyright © 2015年 wang. All rights reserved.
//

#import <UIKit/UIKit.h>

/**
 使用协议代理传值
 */

@protocol IntentFrist <NSObject>

-(void)getUserNameTitle:(NSString*) userNameTitle;

@end



@interface ViewController2 : UIViewController
//类实现委托代理

@property(nonatomic,assign)id<IntentFrist> delegate;//实现代理

@property(nonatomic,copy) NSString* userNameTitle;

@end

 

 

//
//  ViewController2.m
//  test1114
//
//  Created by wang on 15/11/15.
//  Copyright © 2015年 wang. All rights reserved.
//

#import "ViewController2.h"
#import "ViewController3.h"

@interface ViewController2 ()

@property UITextField* tf1;

@end

@implementation ViewController2

@synthesize userNameTitle=_userNameTitle;
@synthesize  delegate=_delegate;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.navigationItem.title=@"第二个页面";
    
    //姓名输入框
    _tf1= [[UITextField alloc]init];
    _tf1.frame=CGRectMake(100, 100, 200, 30);
    //设置边框
    _tf1.borderStyle=UITextBorderStyleRoundedRect;
    //设置输入框的背景颜色
    _tf1.backgroundColor=[UIColor whiteColor];
    // 设置提示语
    _tf1.placeholder=@"请输入姓名";
    
    _tf1.text=_userNameTitle;
    
    [self.view addSubview:_tf1];
    [_tf1 release];
   
  UIButton* btn= [UIButton buttonWithType:UIButtonTypeRoundedRect];

    btn.frame=CGRectMake(10, 200, 300, 200);
  
    [btn setTitle:@"跳转到最后一个页面" forState:UIControlStateNormal];
    
    [btn addTarget:self action:@selector(ShowNext) forControlEvents:(UIControlEventTouchUpInside)];
    
    [self.view addSubview:btn];
    


    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/
     
-(void)ShowNext{
    
    //点击按钮返回到上一个界面,并将输入框的参数带到上一个界面
    
    NSString* btn=_tf1.text;
    NSLog(@"%@",_tf1.text);
//    if ([_delegate respondsToSelector:@selector(nextA:)]) {
        [_delegate getUserNameTitle:_tf1.text];
//    }

    //设置视图出栈
    [self.navigationController popViewControllerAnimated:YES];

    
//    ViewController3 * vc3 = [[ViewController3 alloc]init];
//    
//    [self.navigationController pushViewController:vc3 animated:YES];
//    
//    [vc3 release];
     }

@end

 

解释:第二个页面的数据传递到第一个页面,

 

1),先讲第二个页面的值放到协议中        [_delegate getUserNameTitle:_tf1.text];

2),第一个页面实现协议并接收数据   

#pragma mark -实现协议,并接收传值

-(void)getUserNameTitle:(NSString *)userNameTitle{

 

    NSLog(@"%@",userNameTitle);

    _tf1.text=userNameTitle;

 

}

 

 

android页面之间的数据传递;

布局就一个输入框和按钮

 

第一个页面

package com2.example.wang.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText input_text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });

        //初始化输入框
        input_text= (EditText)findViewById(R.id.index_et);
    }

    /**
     * 按钮点击事件
     * @param view
     */
    public void show(View view){
        switch (view.getId()){
            case R.id.index_btn:
                //获得输入框的值,将值传到下一页
                startActivity(new Intent(MainActivity.this,Main2Activity.class).putExtra("userNameTitle",input_text.getText().toString().trim()));

                break;
            case R.id.index_btn2:
                //获得输入框的值,将值传到下一页
                Intent intent =new Intent();
                intent.setClass(MainActivity.this,Main2Activity.class);
                intent.putExtra("userNameTitle",input_text.getText().toString().trim());
                startActivityForResult(intent, 2);

                break;
            default:
                break;
        }
    }

    /**
     * 获得第二个界面传递的值
     * @param requestCode
     * @param resultCode
     * @param data
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(resultCode==RESULT_OK&&requestCode==2){

            input_text.setText(data.getStringExtra("userNameTitle"));
        }

        super.onActivityResult(requestCode, resultCode, data);
    }

    /**
     *
     * @param menu
     * @return
     */

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

 

第二个页面

package com2.example.wang.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;

public class Main2Activity extends AppCompatActivity {

    private EditText inputText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
        //初始化组件
        inputText= (EditText)findViewById(R.id.et);

        //将传递的值设置到输入框中
       inputText.setText(getIntent().getStringExtra("userNameTitle"));
    }



    /**
     * 按钮点击事件
     * @param view
     */
    public void show(View view){
        switch (view.getId()){

            case R.id.btn:
                //获得输入框的值,将值传到下一页
                Intent intent =new Intent();
//                intent.setClass(Main2Activity.this, MainActivity.class);
                intent.putExtra("userNameTitle", inputText.getText().toString().trim());
            setResult(RESULT_OK,intent);
                finish();
                break;
            default:
                break;
        }
    }


}

 

android的跳转是通过Intent实现的,数据也可以直接放在Intent对象中传递

 

反向传值:

1,startActivityForResult

2,实现onActivityResult

3,第二个页面使用setResult带返回值跳转

4,综上 还是Android实现简单

 

0
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics