ios常用的三種傳值方式
阿新 • • 發佈:2019-02-01
總結我專案中常用的三種傳值方式
近期在研究Python,公司正好有Python專案,對於自己來說也算是橫向發展
1:Block傳值
場景:比如在同一個頁面(A)點選了型別,彈出新的頁面(B),這時候需要獲取新頁面點選的是哪個型別值,,所以就需要新頁面將點選的值傳遞到該頁面進行資料操作
1:在B的.h檔案中定義Block屬性
@property(nonatomic,copy)void (^returnPerson)(NSString * persontext);
2: 在B的.m檔案中設定屬性值
self.returnPerson(item.code);
3:在A中現實block person值就是B類中的item.code
["B物件" setReturnPerson:^(NSString * person) {
}];
2:代理傳值
場景:在A頁面點選右邊按鈕,彈出一個列表頁面B,點選B中某個值,重新整理A頁面資料
1:在B的.h檔案中定義代理方法
@protocol TopChangViewDelegate <NSObject>
@optional
- (void)selectWithIndex:(NSInteger)index andTitle:(CityModel *)title;
@end
@interface B類: UIView
@property (nonatomic, weak) id<TopChangViewDelegate> delegate;
@end
2:在B的.m檔案中實現代理方法 在點選B中某個值觸發的方法中寫
if ([self.delegate respondsToSelector:@selector(selectWithIndex:andTitle:)]) {
[self.delegate selectWithIndex:“角標” andTitle:@“值”];
}
3:在A的.m檔案中實現
B類 *topContianerView = [[B類 alloc] initWithFrame:CGRectMake(0 , 0, [UIScreen mainScreen].bounds.size.width, 40)];
topContianerView.delegate = self;
實現代理方法 重新整理
- (void)selectWithIndex:(NSInteger)index andTitle:(CityModel*)title{
NSLog(@"選擇的是第幾個%ld %@",index,title);
}
3:通知傳值
場景是上述一致
1:在B的.m檔案 傳送需要傳遞的資料
[[NSNotificationCenter defaultCenter] postNotificationName:@"SelectTagNotification" object:nil userInfo:@{@"tagStr":self.itemtag1,@"tagStr1":self.itemtag2,@"tagStr2":self.itemtag3}];
2:在A的.m檔案 接受傳遞過來的資料
[[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(selectTag:) name:@"SelectTagNotification" object:nil];
//實現定義方法即可
-(void)selectTag:(NSNotification*)noty{
// not就是傳遞過來的資料
NSDictionary * not = noty.userInfo;
}
3:在A的.m檔案 需要remove通知
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}