转载了一些相关的知识,看得迷迷糊糊,自己理解后进行了整理,与大家分享。
用代理方法进行视图之间的传值 B视图值传入A视图
1、在B视图的.h文件中声明一个协议ChooseCityControllerDelegate,协议名用B视图的名称+Delegate组成
@protocol ChooseCityControllerDelegate <NSObject>
-(void)CityName:(NSString *)CityName;
@end
2、在B视图的.h文件中设置一个类型为id的属性,这个属性可能是任何类型,所以此处用id。为防止循环引用,此处采用了weak。该属性必须遵循我们声明的协议ChooseCityControllerDelegate
@property (nonatomic,weak)id <ChooseCityControllerDelegate> delegate;
3、在B视图.m文件中页面切换的位置,用自身的代理来执行协议,将需要传给A视图的值作为参数传递。其中[[_cities objectForKey:key] objectAtIndex:indexPath.row]]为要传递的值,也可为一个@“123”,字符串参数,看项目需要什么值。
[self.delegate CityName:[[_cities objectForKey:key] objectAtIndex:indexPath.row]];
4、在B视图.m文件中页面切换的位置,还需要切换页面进行跳转
[self.navigationController popViewControllerAnimated:YES];
5、在A视图的.m文件中引用协议名,ChooseCityControllerDelegate为协议名
@interface GoOutViewController ()<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate,UIGestureRecognizerDelegate,CLLocationManagerDelegate,ChooseCityControllerDelegate>
6、在A视图的.m文件中实现协议中的方法,把想做的的事情写在其中。此处是将传来的值赋给 _cityLal。
-(void)CityName:(NSString *)CityName{
_cityLal.text=CityName;
}
7、在A视图的.m文件切换到B试图(receiveVc为B试图)的位置,记得实现B视图的代理方法,即
receiveVc.delegate =self;
8、传值时类型要保持一致,接收的值是Model的就要传Model,是NSString就传NSString。