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

iOS学习笔记(7)视图控制器之间传递参数的三种方式

2015-07-02 20:31 561 查看
视图控制器之间传递参数的三种方式:1.委托(delegate) 2. block    3.通知(NSNotificationCenter)

1.委托

B视图切换到A视图并且携带参数

在B视图中制定协议,A视图来尊从协议

B视图
@protocol ModelDelegate <NSObject>

@optional
//可选,我们可以实现,也可以不实现

@required //必须要实现,默认@reqired
-(void)textFieldStr:(NSString*)str;

@end

@interface SecondViewController :
UIViewController<UITextFieldDelegate>

@property(nonatomic,assign)id<ModelDelegate> delegate;//代理对象

@end

===========

UITextField *textField=(UITextField*)[self.view
viewWithTag:12];

    //判断delegate不为空并且我们协议中的方法实现
   
if (_delegate!=nil && [_delegate
respondsToSelector:@selector(textFieldStr:)]) {//如果不为空说明当前的代理对象就是第一个视图控制器对象

        NSLog(@"//判断delegate不为空并且我们协议中的方法实现");

        //我们的代理回传数据
        [_delegate
textFieldStr:textField.text];
    }

====================================

A视图

 SecondViewController *second=[[SecondViewController
alloc]
init];

    

    second.delegate=self;//将代理对象指向第一个视图控制器

    //建立代理关系

    [self
presentViewController:second animated:YES
completion:^{
    }];
    [second
release];

//协议中的方法
-(void)textFieldStr:(NSString *)str
{

    UITextField *textField=(UITextField*)[self.view
viewWithTag:12];
    textField.text=str;
}

==============================================

2.block

B视图切换到A视图,并且携带参数

那么B视图创建block

#import <UIKit/UIKit.h>
typedef 
void(^TextFiledBlock)(NSString *);
@interface SecondViewController :
UIViewController

@property (nonatomic,copy)TextFiledBlock textfiledBlock;

@property (nonatomic,copy)void(^blockTest)(NSString *str);

@end

 [self.navigationController
popViewControllerAnimated:YES];

    UITextField *textField=(UITextField*)[self.view
viewWithTag:10];

    if(self.textfiledBlock)
    {
       
self.textfiledBlock(textField.text);
    }

A视图接受参数

 SecondViewController *second=[[SecondViewController
alloc]init];

    UITextField *textField=(UITextField*)[self.view
viewWithTag:100];
  second.textfiledBlock=^(NSString *str)
    {
        textField.text=str;
    };

3.通知

B视图切换到A视图,并且携带参数

那么B视图是发送通知的一方

//创建我们的通知
-(void)createNoti
{

    //第一个参数是通知用到名字

    //第二个接收对象,nil群发

    //第三个用户信息,我们要传的数据

    

    UITextField *textField=(UITextField*)[self.view
viewWithTag:12];
   
NSDictionary *dict=[NSDictionary
dictionaryWithObjectsAndKeys:textField.text,@"textFieldStr",
nil];

    //发送通知

    [[NSNotificationCenter
defaultCenter] postNotificationName:@"SecondFieldStr"
object:nil
userInfo:dict];

    

}

A视图接受通知的一方

  //用户通知中心

    [[NSNotificationCenter
defaultCenter] addObserver:self
selector:@selector(reciveFieldStr:)
name:@"SecondFieldStr"
object:nil];

//接收通知的方法
-(void)reciveFieldStr:(NSNotification*)notification
{

    //NSLog(@"收到通知");

    

    UITextField *textField=(UITextField*)[self.view
viewWithTag:12];

    
   
NSDictionary *dict=notification.userInfo;

    
    textField.text=[dict
objectForKey:@"textFieldStr"];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: