1. 程式人生 > >ios常用的三種傳值方式

ios常用的三種傳值方式

總結我專案中常用的三種傳值方式

近期在研究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];
}