QuestionViewController.m 25.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
//
//  QuestionViewController.m
//  redstar
//
//  Created by admin on 15/11/2.
//  Copyright © 2015年 ZWF. All rights reserved.
//

#import "QuestionViewController.h"
#import "QuestionListTableCell.h"
#import "MenuButton.h"
12
#import "QuestionDetailViewController.h"
admin's avatar
admin committed
13
#import "AddQuestionViewController.h"
admin's avatar
admin committed
14 15
#import "HttpClient.h"
#import "QuestionModel.h"
16 17 18 19 20
#import "SearchToolBar.h"
#import "TaxisView.h"
#import "ScreenView.h"
#import "MenuView.h"
#import "CustomDropMenuView.h"
admin's avatar
admin committed
21

22 23
#import "NoDataView.h"
#import <MBProgressHUD.h>
admin's avatar
admin committed
24
#import "RedStarTools.h"
25

26 27
#define kQuestionListCell @"questionListTableViewCell"
#define kThumbTag 745645
28
@interface QuestionViewController () <UITableViewDelegate, UITableViewDataSource, ScreenTableDelegate, TaxisViewDelegate, InspectTableViewDelegate>
29
@property (nonatomic, strong) UITableView *tableView;
admin's avatar
admin committed
30 31
@property (nonatomic, strong) NSMutableArray *allQuestionArray;

32 33 34 35
@property (nonatomic, strong) SearchToolBar *searchBar;
@property (nonatomic, strong) MenuView *menuView;

@property (nonatomic, strong) TaxisView *taxisView;
36
@property (nonatomic, strong) ScreenView *screenView;
37

38 39
@property (nonatomic, strong) UIView *bgView;
@property (nonatomic, strong) MenuButton *selctedButton;
40 41 42
@property (nonatomic, strong) UIButton *selectBtn;

@property (nonatomic, strong) NoDataView *noDataView;
43

44 45 46
@property (nonatomic, assign) NSInteger selectRow;
@property (nonatomic, assign) NSInteger timeSelectNum;

47 48 49 50 51 52 53 54
@end

@implementation QuestionViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
55 56
    self.view.backgroundColor = [UIColor whiteColor];
    
admin's avatar
admin committed
57 58 59 60 61 62
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        self.edgesForExtendedLayout = UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars = NO;
        self.modalPresentationCapturesStatusBarAppearance = NO;
        self.navigationController.navigationBar.translucent = NO;
    }
63 64
    
    [self setupNav];
admin's avatar
admin committed
65 66
    
    [self requestQuestionList];
67 68 69 70 71 72 73 74 75
    
   
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.menuView.taxiButton addTarget:self action:@selector(dropCilck:) forControlEvents:UIControlEventTouchUpInside];
    [self.menuView.screenButton addTarget:self action:@selector(dropCilck:) forControlEvents:UIControlEventTouchUpInside];
76
    self.tabBarController.tabBar.hidden = YES;
77 78 79 80 81 82 83 84
}


- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.menuView removeFromSuperview];
    self.menuView = nil;
85 86
}

87 88


89 90 91 92 93 94
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Private Methods
admin's avatar
admin committed
95 96
- (void)requestQuestionList
{
admin's avatar
admin committed
97 98 99
    // 初始化数组
    self.allQuestionArray = [NSMutableArray array];
    // 请求地址
admin's avatar
admin committed
100
    NSString *urlStr = [NSString stringWithFormat:@"%@%@", kRedStarURL, kQuestionListURL];
101 102
    NSString *user_uuid = [[NSUserDefaults standardUserDefaults] objectForKey:@"user_uuid"];

admin's avatar
admin committed
103
    // 请求参数
admin's avatar
admin committed
104
    NSDictionary *parameters = @{@"user":user_uuid,
admin's avatar
admin committed
105
                                 @"scope":@"all",
106 107
                                 @"pageNumber":@(0),
                                 @"pageSize":@(20)
admin's avatar
admin committed
108 109
                                 };
    
admin's avatar
admin committed
110 111 112 113
    // 发起请求
    HttpClient *httpClient = [[HttpClient alloc] initWithUrl:urlStr];
    //
    __block QuestionViewController *weakSelf = self;
114 115
    
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
admin's avatar
admin committed
116 117 118 119
    // 请求问题列表
    [httpClient getQuestionListWithParameters:parameters completion:^(id response, NSError *error) {
        NSDictionary *dataDict = (NSDictionary *)response[@"data"];
        NSDictionary *recordsDict = (NSDictionary *)dataDict[@"records"];
120
        NSLog(@"问题与知识列表recods = %@", response);
admin's avatar
admin committed
121
        NSLog(@"error = %@", error);
admin's avatar
admin committed
122 123 124 125 126
        for (NSDictionary *questionDict in recordsDict) {
            QuestionModel *question = [[QuestionModel alloc] init];
            [question setValuesForKeysWithDictionary:questionDict];
            [weakSelf.allQuestionArray addObject:question];
        }
127 128 129 130 131 132 133 134
        if (_allQuestionArray.count == 0) {
            weakSelf.noDataView.backgroundColor = [UIColor whiteColor];
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        } else {
            [weakSelf setupTableView];
            [MBProgressHUD hideHUDForView:self.view animated:YES];
        }
        
admin's avatar
admin committed
135 136
    }];
}
137

138 139 140
- (void)setupTableView
{
    [self.tableView registerClass:[QuestionListTableCell class] forCellReuseIdentifier:kQuestionListCell];
141
    
142 143 144
    self.searchBar.backgroundColor = kSectionBackGroundColor;
}

145 146 147 148 149 150 151 152 153 154
- (void)setupNav
{
    UILabel *customLab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 40, 30)];
    [customLab setTextColor:[UIColor whiteColor]];
    [customLab setText:@"问题与知识"];
    customLab.font = [UIFont boldSystemFontOfSize:19];
    self.navigationItem.titleView = customLab;
    
    UIButton *rightButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 60, 20)];
    [rightButton setTitle:@"新增问题" forState:UIControlStateNormal];
admin's avatar
admin committed
155
    [rightButton addTarget:self action:@selector(addQuestionClick:) forControlEvents:UIControlEventTouchUpInside];
156 157 158 159
    [rightButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
    rightButton.titleLabel.font = [UIFont systemFontOfSize:15];
    UIBarButtonItem *rightButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightButton];
    self.navigationItem.rightBarButtonItem = rightButtonItem;
admin's avatar
admin committed
160 161 162 163 164 165 166 167
    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    backBtn.frame = CGRectMake(0, 0, 30, 44);
    
    [backBtn setImage:[UIImage imageNamed:@"back_btn"] forState:UIControlStateNormal];
    [backBtn addTarget:self action:@selector(doBack:) forControlEvents:UIControlEventTouchUpInside];
    
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
    self.navigationItem.leftBarButtonItem = backItem;
168 169
}

admin's avatar
admin committed
170 171 172 173 174
- (void)doBack:(id)sender
{
    [self.navigationController dismissViewControllerAnimated:YES completion:nil];
}

admin's avatar
admin committed
175
- (void)addQuestionClick:(UIButton *)sender
176
{
admin's avatar
admin committed
177 178
    AddQuestionViewController *addQuestionVC = [[AddQuestionViewController alloc] init];
    [self.navigationController pushViewController:addQuestionVC animated:YES];
179 180
}

181
- (void)dropCilck:(MenuButton *)sender
admin's avatar
admin committed
182
{
183 184 185 186 187 188 189 190 191 192 193 194 195
    sender.isDrop = !sender.isDrop;
    
    if (_selctedButton.tag == sender.tag) {
        
        
        if (sender.isDrop) {
            if (sender.tag == 4001) {
                [self showRedView];
            } else {
                [self showGreenView];
            }
            [sender setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
            
196
        } else {
197 198 199 200 201 202
            if (sender.tag == 4001) {
                [self closeRedView];
            } else {
                [self closeGreenView];
            }
            [sender setTitleColor:kInspectSectionButtonTextColor forState:UIControlStateNormal];
203 204
        }
    } else {
205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
        // 前一次选中的按钮 选中状态置为NO
        _selctedButton.selected = NO;
        _selctedButton.isDrop = NO;
        // 进行选中状态为NO 的操作
        //   1.将发生“选中”->“未选中”状态变化的按钮文字由Orange->White
        [_selctedButton setTitleColor:kInspectSectionButtonTextColor forState:UIControlStateNormal];
        //   2.判断当前是否有bgView 有->移除, 没有->跳过
        if (_bgView) {
            // _bgView存在
            [_bgView removeFromSuperview];
            _bgView = nil;
        }
        
        if (_taxisView) {
            [_taxisView removeFromSuperview];
            _taxisView = nil;
        }
        
        if (_screenView) {
            [_screenView removeFromSuperview];
            _screenView = nil;
        }
        
        
        // 将当前选中的按钮设置 选中状态为YES;
        sender.selected = YES;
        // 对选中按钮 进行相关操作
        //   1.将选中按钮的文字设置为Orange
        [sender setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        _selctedButton = (MenuButton *)sender;
        
        if (sender.tag == 4001) {
            [self showRedView];
238
        } else {
239
            [self showGreenView];
240 241 242 243
        }
    }
}

244 245

- (void)showRedView
246
{
247 248 249 250
    if (!_bgView) {
        _bgView = [[UIView alloc] initWithFrame:self.view.bounds];
        UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeRedView)];
        [_bgView addGestureRecognizer:tapGR];
251 252 253 254 255 256
    }
    if (!_taxisView) {
        _taxisView = [[TaxisView alloc] init];
        _taxisView.backgroundColor = [UIColor whiteColor];
    }
    
257
    _taxisView.delegate = self;
258 259 260 261 262
    [self.view addSubview:_bgView];
    [self.view insertSubview:_taxisView aboveSubview:_bgView];
    
    _bgView.alpha = 0;
    _bgView.backgroundColor = [UIColor blackColor];
263 264 265 266 267 268
    
    CGRect toFrame = CGRectMake(0, 45, kScreenWidth, kTaxisViewHeight);
    CGRect fromFrame = CGRectMake(0, -kTaxisViewHeight, kScreenWidth, kTaxisViewHeight);
    
    _taxisView.frame = fromFrame;
    [UIView animateWithDuration:0.3 animations:^{
269
        _bgView.alpha = 0.6;
270 271
        _taxisView.frame = toFrame;
    }];
272
    
273 274
}

275 276 277
- (void)closeRedView
{
    _selctedButton.isDrop = NO;
278
    _selctedButton.selected = NO;
279 280 281 282 283 284 285 286 287 288 289 290 291
    [_selctedButton setTitleColor:kInspectSectionButtonTextColor forState:UIControlStateNormal];
    CGRect fromFrame = CGRectMake(0, -kTaxisViewHeight, kScreenWidth, kTaxisViewHeight);
    [UIView animateWithDuration:0.3 animations:^{
        _bgView.alpha = .0f;
        _taxisView.frame = fromFrame;
    } completion:^(BOOL finished) {
        [_bgView removeFromSuperview];
        [_taxisView removeFromSuperview];
    }];
}


- (void)showGreenView
292
{
293 294 295 296
    if (!_bgView) {
        _bgView = [[UIView alloc] initWithFrame:self.view.bounds];
        UITapGestureRecognizer *tapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(closeGreenView)];
        [_bgView addGestureRecognizer:tapGR];
297 298
    }
    if (!_screenView) {
299
        _screenView = [[ScreenView alloc] initWithTitleArray:[NSArray arrayWithObjects:@"待解决", @"已解决",@"已作废",nil]];
300
        _screenView.delegate = self;
301
        _screenView.inspectTableView.inspectDelegate = self;
302 303
        _screenView.backgroundColor = [UIColor whiteColor];
    }
304 305
    [_screenView.resetBtn addTarget:self action:@selector(resetClick:) forControlEvents:UIControlEventTouchUpInside];
    [_screenView.submitBtn addTarget:self action:@selector(submitClick:) forControlEvents:UIControlEventTouchUpInside];
306
    
307 308
    [self.view addSubview:_bgView];
    [self.view insertSubview:_screenView aboveSubview:_bgView];
309
    
310 311 312 313 314
    _bgView.alpha = 0;
    _bgView.backgroundColor = [UIColor blackColor];
    
    CGRect toFrame = CGRectMake(0, 45, kScreenWidth, kScreenViewHeight);
    CGRect fromFrame = CGRectMake(0, -kScreenViewHeight, kScreenWidth, kScreenViewHeight);
315 316 317
    
    _screenView.frame = fromFrame;
    [UIView animateWithDuration:0.3 animations:^{
318
        _bgView.alpha = 0.6;
319 320
        _screenView.frame = toFrame;
    }];
321
    
322 323
}

324
- (void)closeGreenView
325
{
326
    _selctedButton.isDrop = NO;
327
    _selctedButton.selected = NO;
328 329 330 331 332 333 334 335 336
    [_selctedButton setTitleColor:kInspectSectionButtonTextColor forState:UIControlStateNormal];
    CGRect fromFrame = CGRectMake(0, -kScreenViewHeight, kScreenWidth, kScreenViewHeight);
    [UIView animateWithDuration:0.3 animations:^{
        _bgView.alpha = .0f;
        _screenView.frame = fromFrame;
    } completion:^(BOOL finished) {
        [_bgView removeFromSuperview];
        [_screenView removeFromSuperview];
    }];
337 338
}

339

340 341 342
- (void)searchBarClick:(UIButton *)sender
{
    NSLog(@"%@", self.searchBar.searchTextFiled.text);
admin's avatar
admin committed
343
}
344

345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499
// 重置按钮
- (void)resetClick:(UIButton *)sender
{
    NSInteger selectedIndex = 0;
    NSIndexPath *selectedIndexPath = [NSIndexPath indexPathForRow:selectedIndex inSection:0];
    [_screenView.tableView selectRowAtIndexPath:selectedIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    
    _screenView.textView.text = @"";
    
    NSInteger timeIndex = 0;
    NSIndexPath *timeIndexPath = [NSIndexPath indexPathForRow:timeIndex inSection:0];
    [_screenView.tableView selectRowAtIndexPath:timeIndexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
    _selectRow = 0;
}
// 提交按钮
- (void)submitClick:(UIButton *)sender
{
    // 请求地址
    NSString *urlStr = [NSString stringWithFormat:@"%@%@", kRedStarURL, kQuestionListURL];
    NSString *user_uuid = [[NSUserDefaults standardUserDefaults] objectForKey:@"user_uuid"];
    
  
    NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       user_uuid,@"user",
                                       @"all",@"scope",
                                       @(0),@"pageNumber",
                                       @(10),@"pageSize", nil];
    // 发起请求
    HttpClient *httpClient = [[HttpClient alloc] initWithUrl:urlStr];
    //
    __block QuestionViewController *weakSelf = self;
    
    [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    
    
    if (_screenView.groupTabBar.selectNumber == 0) {
        if (_selectRow == 0) {
            [parameters setObject:@"created" forKey:@"state"];
        } else if (_selectRow == 1) {
            [parameters setObject:@"resolved" forKey:@"state"];
        } else {
            [parameters setObject:@"aborted" forKey:@"state"];
        }
        
    } else if (_screenView.groupTabBar.selectNumber == 1) {
        if (_screenView.textView.text.length != 0){
            [parameters setObject:_screenView.textView.text forKey:@"contentLike"];
        } else {
            [parameters setObject:_screenView.textView.text forKey:@"contentLike"];
        }
    } else {
        
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

        // 当前时间
        NSDate *today = [NSDate date];
        NSString *todayStr = [dateFormatter stringFromDate:today];
        
        if (_timeSelectNum == 0) {

            NSDate *week = [today dateByAddingTimeInterval:-60*60*24*7];
            NSString *weekStr = [dateFormatter stringFromDate:week];
            
            [parameters setObject:weekStr forKey:@"submitTimeFrom"];
            [parameters setObject:todayStr forKey:@"submitTimeTo"];
        } else if (_timeSelectNum == 1) {
            
            NSDate *oneMonth = [self getPriousorLaterDateFromDate:today withMonth:-1];
            NSString *oneMonthStr = [dateFormatter stringFromDate:oneMonth];
            NSLog(@"oneMonth = %@", oneMonthStr);
            
            [parameters setObject:oneMonthStr forKey:@"submitTimeFrom"];
            [parameters setObject:todayStr forKey:@"submitTimeTo"];
            
        } else if (_timeSelectNum == 2) {
            NSDate *threeMonth = [self getPriousorLaterDateFromDate:today withMonth:-3];
            NSString *threeMonthStr = [dateFormatter stringFromDate:threeMonth];
            
            [parameters setObject:threeMonthStr forKey:@"submitTimeFrom"];
            [parameters setObject:todayStr forKey:@"submitTimeTo"];
        } else if (_timeSelectNum == 3) {
            NSDate *oneYear = [self getPriousorLaterDateFromDate:today withMonth:-12];
            NSString *oneYearStr = [dateFormatter stringFromDate:oneYear];
            
            [parameters setObject:oneYearStr forKey:@"submitTimeFrom"];
            [parameters setObject:todayStr forKey:@"submitTimeTo"];
        } else {
            NSDate *oneYear = [self getPriousorLaterDateFromDate:today withMonth:-12];
            NSString *oneYearStr = [dateFormatter stringFromDate:oneYear];
            [parameters setObject:oneYearStr forKey:@"submitTimeTo"];
        }
       
    }
    
    
    NSLog(@"parameters = %@",parameters);

    
    
    // 请求问题列表
    [httpClient getQuestionListWithParameters:parameters completion:^(id response, NSError *error) {
        NSDictionary *dataDict = (NSDictionary *)response[@"data"];
        NSDictionary *recordsDict = (NSDictionary *)dataDict[@"records"];
        NSLog(@"问题与知识列表recods = %@", response);
        NSMutableArray *tempArray = [NSMutableArray array];
        for (NSDictionary *questionDict in recordsDict) {
            QuestionModel *question = [[QuestionModel alloc] init];
            [question setValuesForKeysWithDictionary:questionDict];
            [tempArray addObject:question];
        }
        _allQuestionArray = tempArray;

        if (_allQuestionArray.count == 0) {
            if (_tableView) {
                [_tableView removeFromSuperview];
                _tableView = nil;
            }
            weakSelf.noDataView.backgroundColor = [UIColor whiteColor];
            [MBProgressHUD hideHUDForView:weakSelf.view animated:YES];
            [weakSelf closeGreenView];
        } else {
            if (_noDataView) {
                [_noDataView removeFromSuperview];
                _noDataView = nil;
            }
            weakSelf.tableView.delegate = weakSelf;
            weakSelf.tableView.dataSource = weakSelf;
            [weakSelf.tableView reloadData];
            [MBProgressHUD hideHUDForView:weakSelf.view animated:YES];
            _screenView.textView.text = @"";
            [weakSelf closeGreenView];
        }
    }];

}

- (NSDate *)getPriousorLaterDateFromDate:(NSDate *)date withMonth:(int)month
{
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    [comps setMonth:month];
    NSCalendar *calender = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDate *mDate = [calender dateByAddingComponents:comps toDate:date options:0];
    return mDate;
}




#pragma mark - InspectTableViewDelegate
- (void)inspectTableViewDidSelectWithRow:(NSInteger)row
{
    _selectRow = row;
}

500 501 502
#pragma mark - TaxisDelegate
- (void)timeChange:(UIButton *)sender
{
503
    [self closeRedView];
504 505
}

506
#pragma mark - ScreenTableDelegate
507
- (void)tableViewDidSelectRow:(NSInteger)row
508
{
509
    _timeSelectNum = row;
510 511
}

admin's avatar
admin committed
512
#pragma mark - UItableView Delegate/DataSource
513 514
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
admin's avatar
admin committed
515
    return _allQuestionArray.count;
516 517 518 519 520 521 522 523
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    QuestionListTableCell *cell=[tableView dequeueReusableCellWithIdentifier:kQuestionListCell];
    if (!cell) {
        cell = [[QuestionListTableCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kQuestionListCell];
    }
admin's avatar
admin committed
524
    cell.question = _allQuestionArray[indexPath.row];
525 526 527
    return cell;
}

528 529 530 531
// cell点击事件
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    QuestionDetailViewController *questionDetailVC = [[QuestionDetailViewController alloc] init];
532 533
    QuestionModel *question = (QuestionModel *)_allQuestionArray[indexPath.row];
    questionDetailVC.questionUuid = question.uuid;
534
    questionDetailVC.row = indexPath.row;
535 536 537
    [self.navigationController pushViewController:questionDetailVC animated:YES];
}

538 539 540 541 542 543 544
// cell的高度
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 120;
}

// section高度
545 546 547 548
//- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
//{
//    return 45;
//}
549 550 551 552 553 554

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 0;
}

555 556 557

#pragma mark - lazy loading
- (MenuView *)menuView
558
{
559 560 561 562 563 564 565 566 567
    if (!_menuView) {
        _menuView = [[MenuView alloc] init];
        _menuView.translatesAutoresizingMaskIntoConstraints = NO;
        _menuView.backgroundColor = kInspectSectionBackGroundColor;
        UIWindow *window = [[UIApplication sharedApplication].windows lastObject];
        [window addSubview:_menuView];
        
        NSLayoutConstraint *menuTop = [NSLayoutConstraint constraintWithItem:_menuView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeTop multiplier:1.0 constant:64];
        [window addConstraint:menuTop];
568

569 570 571 572 573 574 575 576 577 578 579
        NSLayoutConstraint *menuLeft = [NSLayoutConstraint constraintWithItem:_menuView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
        [window addConstraint:menuLeft];
        
        NSLayoutConstraint *menuRight = [NSLayoutConstraint constraintWithItem:_menuView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:window attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
        [window addConstraint:menuRight];
        
        NSLayoutConstraint *menuHeight = [NSLayoutConstraint constraintWithItem:_menuView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:45];
        [window addConstraint:menuHeight];
    }
    return _menuView;
}
580 581 582 583 584 585 586 587 588 589

- (UITableView *)tableView
{
    if (!_tableView) {
        _tableView = [[UITableView alloc] initWithFrame:CGRectZero];
        _tableView.translatesAutoresizingMaskIntoConstraints = NO;
        _tableView.delegate = self;
        _tableView.dataSource = self;
        _tableView.showsVerticalScrollIndicator = NO;
        _tableView.showsHorizontalScrollIndicator = NO;
590
        _tableView.tableFooterView = [[UIView alloc] init];
591
        [self.view addSubview:_tableView];
592
        [self.view insertSubview:_tableView atIndex:0];
593
        
594
        NSLayoutConstraint *tableTop = [NSLayoutConstraint constraintWithItem:_tableView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:45];
595 596 597 598 599 600 601 602 603 604 605 606 607 608
        [self.view addConstraint:tableTop];
        
        NSLayoutConstraint *tableLeft = [NSLayoutConstraint constraintWithItem:_tableView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
        [self.view addConstraint:tableLeft];
        
        NSLayoutConstraint *tableRight = [NSLayoutConstraint constraintWithItem:_tableView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
        [self.view addConstraint:tableRight];
        
        NSLayoutConstraint *tableBottom = [NSLayoutConstraint constraintWithItem:_tableView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
        [self.view addConstraint:tableBottom];
    }
    return _tableView;
}

609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632
- (SearchToolBar *)searchBar
{
    if (!_searchBar) {
        _searchBar = [[SearchToolBar alloc] init];
        _searchBar.translatesAutoresizingMaskIntoConstraints = NO;
        [_searchBar.queryButton addTarget:self action:@selector(searchBarClick:) forControlEvents:UIControlEventTouchUpInside];
        [self.view insertSubview:_searchBar atIndex:999];
        [self.view insertSubview:_searchBar aboveSubview:_tableView];
        
        NSLayoutConstraint *tableHeight = [NSLayoutConstraint constraintWithItem:_searchBar attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1.0 constant:50];
        [self.view addConstraint:tableHeight];
        
        NSLayoutConstraint *tableLeft = [NSLayoutConstraint constraintWithItem:_searchBar attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
        [self.view addConstraint:tableLeft];
        
        NSLayoutConstraint *tableRight = [NSLayoutConstraint constraintWithItem:_searchBar attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
        [self.view addConstraint:tableRight];
        
        NSLayoutConstraint *tableBottom = [NSLayoutConstraint constraintWithItem:_searchBar attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
        [self.view addConstraint:tableBottom];
    }
    return _searchBar;
}

633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653
- (NoDataView *)noDataView
{
    if (!_noDataView) {
        _noDataView = [[NoDataView alloc] init];
        _noDataView.translatesAutoresizingMaskIntoConstraints = NO;
        [self.view addSubview:_noDataView];
        
        NSLayoutConstraint *tableTop = [NSLayoutConstraint constraintWithItem:_noDataView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
        [self.view addConstraint:tableTop];
        
        NSLayoutConstraint *tableLeft = [NSLayoutConstraint constraintWithItem:_noDataView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0];
        [self.view addConstraint:tableLeft];
        
        NSLayoutConstraint *tableRight = [NSLayoutConstraint constraintWithItem:_noDataView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1.0 constant:0];
        [self.view addConstraint:tableRight];
        
        NSLayoutConstraint *tableBottom = [NSLayoutConstraint constraintWithItem:_noDataView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0];
        [self.view addConstraint:tableBottom];
    }
    return _noDataView;
}
654 655 656 657 658 659 660 661 662 663 664 665

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end