ICRAnnouncementDetailViewController.m 4.59 KB
Newer Older
mei's avatar
mei committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
//
//  ICRAnnouncementDetailViewController.m
//  XFFruit
//
//  Created by Lili Wang on 15/4/15.
//  Copyright (c) 2015年 Xummer. All rights reserved.
//

#import "ICRAnnouncementDetailViewController.h"
#import "ICRAnnouncementDetailContentView.h"
#import "ICRAnnouncement.h"
#import "ICRAttachment.h"
#import "IBTWebViewController.h"

@interface ICRAnnouncementDetailViewController ()<ICRAnnouncementDetailHeadViewDelegate>

@property (strong, nonatomic) IBTUIScrollView *m_scrollView;
@property (strong, nonatomic) ICRAnnouncementDetailContentView *m_contentView;
@property (strong, nonatomic) ICRAnnouncement *m_announcement;
@property (assign, nonatomic) NSString *m_announcementId;

@end

@implementation ICRAnnouncementDetailViewController

#pragma mark - Life Cycle
- (instancetype)initWithAnnouncementData:(id)announcement {
    self = [super init];
    if (!self) {
        return nil;
    }
    
    if ([announcement isKindOfClass:[ICRAnnouncement class]]) {
        ICRAnnouncement *aAnnouncement = announcement;
        self.m_announcement = aAnnouncement;
        self.m_announcementId =  aAnnouncement.aID ;
    } else {
        self.m_announcementId = announcement;
    }
    
    return self;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    self.title = [IBTCommon localizableString:@"Announcement Detail"];
    [self initContentView];
    
    [self registerContentViewForKVO];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self doHttpGetAnnocement];
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc {
    [self unregisterContentViewFromKVO];
}

#pragma mark - Private Method
- (void)initContentView {
    self.m_scrollView = [[IBTUIScrollView alloc] initWithFrame:self.view.bounds];
    [_m_scrollView autoresizingWithStrechFullSize];
    
    [self.view addSubview:_m_scrollView];
    
    self.m_contentView = [[ICRAnnouncementDetailContentView alloc] initWithFrame:_m_scrollView.bounds];
    _m_contentView.m_delegate = self;
    [_m_contentView updateWithAnnouncement:_m_announcement];
    
    
    [_m_scrollView addSubview:_m_contentView];
    _m_scrollView.contentSize = _m_contentView.size;
}

#pragma mark - Data Update
- (void)fetchAnnouncement {
    ICRDatabaseFetchBlock fetchBlk = ^FMResultSet *(FMDatabase *db) {
        NSString * sql = [NSString stringWithFormat:@"SELECT * FROM %@ WHERE %@ = ?", [ICRAnnouncement TableName], @"uuid"];
        return [db executeQuery:sql,  self.m_announcementId];
    };
    
    __weak typeof(self)weakSelf = self;
    ICRDatabaseFetchResultsBlock fetchResultsBlk = ^(NSArray *fetchedObjects) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        strongSelf.m_announcement = [fetchedObjects firstObject];
        [strongSelf.m_contentView updateWithAnnouncement:_m_announcement];
    };
    
    ICRDataBaseController *dbCtrl = [ICRDataBaseController sharedController];
    [dbCtrl runFetchForClass:[ICRAnnouncement class]
                  fetchBlock:fetchBlk
           fetchResultsBlock:fetchResultsBlk];
}

- (void)doHttpGetAnnocement {
    __weak typeof(self)weakSelf = self;
    void(^succ)(id) = ^(id data) {
        __strong __typeof(weakSelf)strongSelf = weakSelf;
        [strongSelf fetchAnnouncement];
    };
    
    void(^fail)(id) = ^(id data) {
        [IBTLoadingView showTips:data];
    };
    
    ICRHTTPController *httpCtrl = [ICRHTTPController sharedController];
    [httpCtrl doGetBoardWithID:self.m_announcementId
                       success:succ
                       failure:fail];
}

#pragma mark - KVO

- (void)registerContentViewForKVO {
    for (NSString *keyPath in [self observableKeypaths]) {
        [_m_contentView addObserver:self forKeyPath:keyPath options:NSKeyValueObservingOptionNew context:NULL];
    }
}

- (void)unregisterContentViewFromKVO {
    for (NSString *keyPath in [self observableKeypaths]) {
        [_m_contentView removeObserver:self forKeyPath:keyPath];
    }
}

- (NSArray *)observableKeypaths {
    return @[ @"frame" ];
}

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    _m_scrollView.contentSize = _m_contentView.size;
}

#pragma mark -
- (void)AttachmentDetail:(ICRAttachment *)attach downloadBtn:(UIButton *)button {
    NSString *attUrl = [ICRHTTPController AttachmentUrlWithID:@( attach.aID )];
    IBTWebViewController *WVC = [[IBTWebViewController alloc] initWithURL:attUrl presentModal:NO extraInfo:nil];
    [self PushViewController:WVC animated:YES];
}

@end