现在的位置: 首页 > 综合 > 正文

IOS StoryBoard视图切换传值

2017年12月07日 ⁄ 综合 ⁄ 共 4079字 ⁄ 字号 评论关闭

IOS StoryBoard页面传值,在没有StoryBoard之前,xib直接传值我们可以通过协议,下面我们主要说一下StoryBoard界面切换的传值

StoryBoard传值方法一(使用segue传值)

首先新创建一个Project,创建完成以后,打开StoryBoard,在当前的viewcontroller中分别拖放一个UIButton,一个UILabel,一个UITextField,然后向StoryBoard中拖放一个viewcontroller,在新拖放的viewcontroller上面拖放两个UITextFiled,一个UILabel,一个UIButton,拖放完成以后如下图:

在第一个UIViewController的类中定义一个UITextField,指向界面上的UITextField,然后新建一个类SecondViewController,指向第二个viewcontroller,由于第二个viewcontroller界面上有两个UITextField,我们在SecondViewController的头文件中声明两个UITextField,分别指向界面上的UITextField,假设我们要从第一个viewcontroller向界面传递三个参数,分别是字符串name,字符串price,键值对dic,那么我们在SecondViewController.h中声明,同时在.m文件中实现,SecondViewController的代码如下:

#import <UIKit/UIKit.h>

@interface SecondViewController : UIViewController

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

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

@property(nonatomic,strong)NSString *name;

@property(nonatomic,strong)NSString *price;

@property(nonatomic,strong)NSDictionary *dic;


-(IBAction)BtnGoToNext:(id)sender;

@end


#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

@synthesize name;
@synthesize price;
@synthesize dic;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    self.nameField.text = name;
    self.priceField.text =price;
    NSLog(@"dic:%@",dic);
    [super viewDidLoad];
	// Do any additional setup after loading the view.
}
//使用通知传递参数,发送广播
-(void)BtnGoToNext:(id)sender{
    
    //three 是连接线的identifier,如果是tablecell的click时间,这儿可以传当前点击的cell
    [self performSegueWithIdentifier:@"three" sender:self];
    NSArray *array =[NSArray arrayWithObjects:@"one",@"two",@"three", nil];
    NSNotification *notification =[NSNotification notificationWithName:@"notification1" object:array];
    [[NSNotificationCenter defaultCenter] postNotification:notification];
    
    [[NSNotificationCenter defaultCenter] postNotificationName:@"notification2" object:self.priceField.text];
}

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

@end</span>


打开第一个viewcontroller对应的类文件,代码如下:

<span style="font-family:Comic Sans MS;font-size:14px;">#import <UIKit/UIKit.h>

@interface LTViewController : UIViewController

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

@end


#import "LTViewController.h"

@interface LTViewController ()

@end

@implementation LTViewController

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

//怎样跳转到随意一个页面

//在有可能进行上级跳转的ViewController文件里加上以下代码,函数名称任起:

#pragma mark 定义这个函数,别的ViewController在Exit的时候就能直接跳到这了
//在想要跳转view的Exit上右键,选择这个goHome函数,拉到想要运行的button上,就能够实现跳转了(只需要有一个UIStoryboardSegue的参数)
- (IBAction)goHome:(UIStoryboardSegue *)segue
{
    //segue.identifier
    [[segue sourceViewController] class];
}




//使用segue传递参数
//注意:发送数据时,[send setValue:msg forKey:@"name"]; 这个"name"名称一定要与跳转后界面的声明的类型对象的命名一致,不然的话,跳转后的界面是收不到传递的值的。
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSString *content = self.txtField.text;
    UIViewController *next = segue.destinationViewController;
    
    //UIButton *btn =(UIButton *)sender;//跳转触发的对象
    //segue.identifier
    
    if([next respondsToSelector:@selector(setName:)]){//setName:是下一个viewcontroller的中定义的属性自动生成的方法名
        [next setValue:content forKey:@"name"];
        [next setValue:@"10.3" forKey:@"price"];
        
        NSDictionary *dictionary =[NSDictionary dictionaryWithObjectsAndKeys:@"one",@"key",@"three",@"sex",nil];
        [next setValue:dictionary forKey:@"dic"];
    }
}


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

@end

我们在第一个类型重写prepareForSegue方法,在第二个类的didViewLoad方法中接收传递过来的参数

让第一个viewcontroller上面的Button指向第二个viewcontroller,如下图:



这样就完成了参数的传递

StoryBoard传值方法二(使用广播)

向storyboard上面再次拖放一个viewcontroller,在上面拖放一个UILabel,一个UITextField,拖放完成以后如下图:

然后新建一个类,继承自UIViewController,命名为ThreeViewController,指向第三个viewcontroller,我们在.h文件中声明一个UITextField,指向页面的UITextField,我们在该类的ViewDidLoad函数中声明观察者,代码如下:


我们通过performSegueWithIdentifier完成界面的跳转,我们在SecondViewController声明Button的点击方法,如下图:

让第二个viewcontroller上Button为Go To Three的按钮点击指向执行BtnGoToNext,让第二个viewcontroller的manual指向第三个,设置连接线的identifier为three,BtnGoToNext的实现如下图:

这样就完成了参数的传递


代码下载



抱歉!评论已关闭.