一、常用方法
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