Notification与Delegate实现通讯沙拉实例

这个例子是我在AppStore上下的一个沙拉的app模仿做的,现在还没做文件管理。


黄星星就是收藏的意思,在navigationBar上面有个按钮查看收藏夹内容的,黄星星是做了个button,开始想做view,但是没法定位view的位置,我在UITableViewCell没能实现,主要尝试是hittest,layer和view的方式都试过了。然后再说这个button,在改变收藏状态后是用delegate实现的通讯

UITableViewCell的子类中设定一个delegate,在收藏和取消收藏时分别调用delegate的一个方法


<pre name="code" class="objc">@protocol ListTableViewCellDelegate <NSObject>

@optional
-(void)insertNewCell:(UITableViewCell *)cell;
-(void)deleteNewCell:(UITableViewCell *)cell;

@end


 
@property (nonatomic)id<ListTableViewCellDelegate>delegate;


-(void)collect:(UIButton *)btn{
    self.collected = !self.collected;
}

-(void)setCollected:(BOOL)collected{
    _collected = collected;
    
    if(collected){
        [self.collectionButton setImage:[UIImage imageNamed:@"yellowStar"] forState:UIControlStateNormal];
        
        
        
        if(self.delegate && [self.delegate conformsToProtocol:@protocol(ListTableViewCellDelegate) ]){
            
            [self.delegate insertNewCell:self];
        }else{
             
        }
        
    }else{
        [self.collectionButton setImage:[UIImage imageNamed:@"Star"] forState:UIControlStateNormal];
        
        if(self.delegate && [self.delegate conformsToProtocol:@protocol(ListTableViewCellDelegate) ]){
           
            [self.delegate deleteNewCell:self];
        }
    }
    [self setNeedsLayout];
}

然后在viewController中实现这个delegate,将收藏的cell加入一个array中,取消收藏的移除出该array;

-(void)insertNewCell:(UITableViewCell *)cell{
    NSIndexPath *index = [self.ListTableView indexPathForCell:cell];
    
    [colletedArray addObject:saladList[index.row]];
    
    
    
}

-(void)deleteNewCell:(UITableViewCell *)cell{
     NSIndexPath *index = [self.ListTableView indexPathForCell:cell];
    [colletedArray removeObject:saladList[index.row]];
    
    
    
}

这里要记住在cell中实现改delegate,就是cell.delegate = self;

没有做文件管理,所以都是暂时的。。。


然后再是Notification的内容,收藏夹的页面和上一个页面是一样的,收藏夹内也可以取消收藏,这时就需要和主页面同步。

收藏夹的UITableViewController中的cell也实现了delegate

这里cell上加了个tag进行识别

下面是收藏夹的TVC内容

-(void)insertNewCell:(UITableViewCell *)cell{
    
    
    NSDictionary *userInfo = @{@"tag" : @(cell.tag)};
    [[NSNotificationCenter defaultCenter]postNotificationName:ADDCOLLECTNOTIFICATION
                                                       object:self
                                                     userInfo:userInfo];
    
}
-(void)deleteNewCell:(UITableViewCell *)cell{
    
    NSLog(@"delete01");
    NSDictionary *userInfo = @{@"tag" : @(cell.tag)};
    [[NSNotificationCenter defaultCenter]postNotificationName:DELETECOLLECTNOTIFICATION
                                                       object:self
                                                     userInfo:userInfo];

    
}

再在主页面上

-(void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    
    [[NSNotificationCenter defaultCenter] addObserverForName:ADDCOLLECTNOTIFICATION
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
                                                      int tagNum = [note.userInfo[@"tag"] intValue];
                                                      
                                                      for(ListTableViewCell *cell in [self.ListTableView visibleCells]){
                                                          if(cell.tag == tagNum){
                                                              
                                                              
                                                              cell.collected = YES;
                                                          }
                                                      }
                                                  }];
    
    [[NSNotificationCenter defaultCenter] addObserverForName:DELETECOLLECTNOTIFICATION
                                                      object:nil
                                                       queue:nil
                                                  usingBlock:^(NSNotification *note) {
                                                      int tagNum = [note.userInfo[@"tag"] intValue];
                                                      
                                                      for(ListTableViewCell *cell in [self.ListTableView visibleCells]){
                                                          if(cell.tag == tagNum){
                                                              
                                                              NSLog(@"delete");
                                                              cell.collected = NO;
                                                          }
                                                      }
                                                  }];

    
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值