| // |
| // DataPickerViewController.m |
| // |
| // Copyright 2014 Google Inc. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #import "DataPickerState.h" |
| #import "DataPickerViewController.h" |
| |
| @implementation DataPickerViewController |
| |
| - (id)initWithNibName:(NSString *)nibNameOrNil |
| bundle:(NSBundle *)nibBundleOrNil |
| dataState:(DataPickerState *)dataState { |
| self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; |
| if (self) { |
| _dataState = dataState; |
| } |
| return self; |
| } |
| |
| #pragma mark - Table view data source |
| |
| - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
| return 1; |
| } |
| |
| - (NSInteger)tableView:(UITableView *)tableView |
| numberOfRowsInSection:(NSInteger)section { |
| return [self.dataState.cellLabels count]; |
| } |
| |
| - (UITableViewCell *)tableView:(UITableView *)tableView |
| cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
| static NSString * const kCellIdentifier = @"Cell"; |
| UITableViewCell *cell = |
| [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; |
| |
| if (cell == nil) { |
| cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault |
| reuseIdentifier:kCellIdentifier]; |
| } |
| |
| NSDictionary *cellLabelDict = self.dataState.cellLabels[indexPath.row]; |
| NSString *cellLabelText = cellLabelDict[kLabelKey]; |
| if ([cellLabelDict objectForKey:kShortLabelKey]) { |
| cellLabelText = [cellLabelDict objectForKey:kShortLabelKey]; |
| } |
| cell.textLabel.text = cellLabelText; |
| // If the cell is selected, mark it as checked |
| if ([self.dataState.selectedCells containsObject:cellLabelDict[kLabelKey]]) { |
| cell.accessoryType = UITableViewCellAccessoryCheckmark; |
| } else { |
| cell.accessoryType = UITableViewCellAccessoryNone; |
| } |
| return cell; |
| } |
| |
| #pragma mark - Table view delegate |
| |
| - (void)tableView:(UITableView *)tableView |
| didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
| UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath]; |
| NSDictionary *selectedCellDict = _dataState.cellLabels[indexPath.row]; |
| NSString *label = selectedCellDict[kLabelKey]; |
| |
| if (self.dataState.multipleSelectEnabled) { |
| // If multiple selections are allowed, then toggle the state |
| // of the selected cell |
| if ([self.dataState.selectedCells containsObject:label]) { |
| [self.dataState.selectedCells removeObject:label]; |
| selectedCell.accessoryType = UITableViewCellAccessoryNone; |
| } else { |
| [self.dataState.selectedCells addObject:label]; |
| selectedCell.accessoryType = UITableViewCellAccessoryCheckmark; |
| } |
| } else { |
| // Set all cells to unchecked except for the one that was just selected |
| [self.dataState.selectedCells removeAllObjects]; |
| [self.dataState.selectedCells addObject:label]; |
| |
| for (NSIndexPath *curPath in [self.tableView indexPathsForVisibleRows]) { |
| UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:curPath]; |
| if (curPath.row == indexPath.row) { |
| cell.accessoryType = UITableViewCellAccessoryCheckmark; |
| } else { |
| cell.accessoryType = UITableViewCellAccessoryNone; |
| } |
| } |
| } |
| [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; |
| } |
| |
| @end |