您的位置:首页 > 移动开发 > IOS开发

iOS开发 两个视图之间值传递的常用方法<一>

2015-08-24 02:02 435 查看
一、常用方法

1、代码块

2、通知

3、代理

4、kvo

5、单列

由于篇幅 的原因,就在每篇博客写一个方法。

举例直接看代码吧

先给出视图之间的关系吧,在故事板里面直接拖一个导航控制器,两个视图控制器。现在要把视图控制器2里面的textfield 输入的内容返回到视图控制器1的lable里面。



代码块传值

如果不熟悉代码块的相关用法:你就类似函数指针的看待 ,和函数指针相似度差不多

与视图控制器1中的button相关联的方法:

- (IBAction)buttonAction:(UIButton *)sender {
/*performSegueWithIdentifier: 此方法是根据两个视图控制器间的segue 来跳转到与视图控制器1建立关系的视图控制器 这里是视图控制器2 @“push”为segue的名字*/
[self performSegueWithIdentifier:@"push" sender:nil];
}


// View controllers will receive this message during segue unwinding. The default implementation returns the result of -respondsToSelector: - controllers can override this to perform any ancillary checks, if necessary.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//根据与当前视图控制器建立关系的segue 找到对应的视图控制器2
SecondController *vc = segue.destinationViewController;

[vc returnInfor:^(NSString *name, NSString *old) {
_name.text = name;
_old.text = old;
}];
}


看看视图控制器2中的代码:

.h文件:

#import <UIKit/UIKit.h>
//声明一个代码块
typedef void(^BlockInfor)(NSString *name , NSString *old);
@interface SecondController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *nameText;
@property (weak, nonatomic) IBOutlet UITextField *oldText;
//声明一个代码块类型的属性
@property(nonatomic,copy)BlockInfor infor;
//声明方法
-(void)returnInfor:(BlockInfor)infor;
@end


.m文件:

@implementation SecondController

//让视图控制器2中的代码块等于从视图控制器1中传进来的代码块
-(void)returnInfor:(BlockInfor)infor
{
self.infor = infor;
}

//选择一个时机把输入的信息传递给代码块 此时输入肯定是完成了
-(void)viewWillDisappear:(BOOL)animated
{
//通过代码块把参数传给 它指向的那个代码块里面的代码
self.infor(_nameText.text,_oldText.text);
}

//点击视图关闭键盘
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[_nameText resignFirstResponder];
[_oldText resignFirstResponder];
}

@end


通过用代码块来传值代码相当的简洁,包括后面的通知代码也特别简洁。

代码块用到的地方相当的多,希望好好理解这种思想,代码下载地址:http://download.csdn.net/detail/moxi_wang/9040615
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: