diff options
Diffstat (limited to 'AuthSamples/Sample/StaticContentTableViewManager.m')
-rw-r--r-- | AuthSamples/Sample/StaticContentTableViewManager.m | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/AuthSamples/Sample/StaticContentTableViewManager.m b/AuthSamples/Sample/StaticContentTableViewManager.m new file mode 100644 index 0000000..7ac7eb7 --- /dev/null +++ b/AuthSamples/Sample/StaticContentTableViewManager.m @@ -0,0 +1,231 @@ +/* + * Copyright 2017 Google + * + * 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 "StaticContentTableViewManager.h" + +/** @var kCellReuseIdentitfier + @brief The reuse identifier for default style table view cell. + */ +static NSString *const kCellReuseIdentitfier = @"reuseIdentifier"; + +/** @var kCellReuseIdentitfier + @brief The reuse identifier for value style table view cell. + */ +static NSString *const kValueCellReuseIdentitfier = @"reuseValueIdentifier"; + +#pragma mark - + +@implementation StaticContentTableViewManager + +- (void)setContents:(StaticContentTableViewContent *)contents { + _contents = contents; + [self.tableView reloadData]; +} + +- (void)setTableView:(UITableView *)tableView { + _tableView = tableView; + [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCellReuseIdentitfier]; +} + +#pragma mark - UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return _contents.sections.count; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return _contents.sections[section].cells.count; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { + return _contents.sections[section].title; +} + +#pragma mark - UITableViewDelegate + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + StaticContentTableViewCell *cellData = _contents.sections[indexPath.section].cells[indexPath.row]; + if (cellData.customCell) { + return cellData.customCell.frame.size.height; + } + return 44; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + StaticContentTableViewCell *cellData = _contents.sections[indexPath.section].cells[indexPath.row]; + UITableViewCell *cell = cellData.customCell; + if (cell) { + return cell; + } + if (cellData.value.length) { + cell = [tableView dequeueReusableCellWithIdentifier:kValueCellReuseIdentitfier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 + reuseIdentifier:kValueCellReuseIdentitfier]; + cell.detailTextLabel.adjustsFontSizeToFitWidth = YES; + cell.detailTextLabel.minimumScaleFactor = 0.5; + } + cell.detailTextLabel.text = cellData.value; + } else { + // kCellReuseIdentitfier has already been registered. + cell = [tableView dequeueReusableCellWithIdentifier:kCellReuseIdentitfier + forIndexPath:indexPath]; + } + cell.textLabel.text = cellData.title; + cell.accessibilityIdentifier = cellData.accessibilityIdentifier; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + StaticContentTableViewCell *cellData = _contents.sections[indexPath.section].cells[indexPath.row]; + BOOL hasAssociatedAction = cellData.action != nil; + if (hasAssociatedAction) { + cellData.action(); + } + [tableView deselectRowAtIndexPath:indexPath animated:hasAssociatedAction]; +} + +@end + +#pragma mark - + +@implementation StaticContentTableViewContent + ++ (nullable instancetype)contentWithSections: + (nullable NSArray<StaticContentTableViewSection *> *)sections { + return [[self alloc] initWithSections:sections]; +} + +- (nullable instancetype)initWithSections: + (nullable NSArray<StaticContentTableViewSection *> *)sections { + self = [super init]; + if (self) { + _sections = [sections copy]; + } + return self; +} + +@end + +#pragma mark - + +@implementation StaticContentTableViewSection + ++ (nullable instancetype)sectionWithTitle:(nullable NSString *)title + cells:(nullable NSArray<StaticContentTableViewCell *> *)cells { + return [[self alloc] initWithTitle:title cells:cells]; +} + +- (nullable instancetype)initWithTitle:(nullable NSString *)title + cells:(nullable NSArray<StaticContentTableViewCell *> *)cells { + self = [super init]; + if (self) { + _title = [title copy]; + _cells = [cells copy]; + } + return self; +} + +@end + +#pragma mark - + +@implementation StaticContentTableViewCell + ++ (nullable instancetype)cellWithTitle:(nullable NSString *)title { + return [[self alloc] initWithCustomCell:nil + title:title + value:nil + action:nil + accessibilityID:nil]; +} + ++ (nullable instancetype)cellWithTitle:(nullable NSString *)title + value:(nullable NSString *)value { + return [[self alloc] initWithCustomCell:nil + title:title + value:value + action:nil + accessibilityID:nil]; +} + ++ (nullable instancetype)cellWithTitle:(nullable NSString *)title + action:(nullable StaticContentTableViewCellAction)action { + return [[self alloc] initWithCustomCell:nil + title:title + value:nil + action:action + accessibilityID:nil]; +} + ++ (nullable instancetype)cellWithTitle:(nullable NSString *)title + value:(nullable NSString *)value + action:(nullable StaticContentTableViewCellAction)action { + return [[self alloc] initWithCustomCell:nil + title:title + value:value + action:action + accessibilityID:nil]; +} + ++ (nullable instancetype)cellWithTitle:(nullable NSString *)title + value:(nullable NSString *)value + action:(nullable StaticContentTableViewCellAction)action + accessibilityID:(nullable NSString *)accessibilityID { + return [[self alloc] initWithCustomCell:nil + title:title + value:value + action:action + accessibilityID:accessibilityID]; +} + ++ (nullable instancetype)cellWithCustomCell:(nullable UITableViewCell *)customCell { + return [[self alloc] initWithCustomCell:customCell + title:nil + value:nil + action:nil + accessibilityID:nil]; +} + ++ (nullable instancetype)cellWithCustomCell:(nullable UITableViewCell *)customCell + action:(nullable StaticContentTableViewCellAction)action { + return [[self alloc] initWithCustomCell:customCell + title:nil + value:nil action:action + accessibilityID:nil]; +} + +- (nullable instancetype)initWithCustomCell:(nullable UITableViewCell *)customCell + title:(nullable NSString *)title + value:(nullable NSString *)value + action:(nullable StaticContentTableViewCellAction)action + accessibilityID:(nullable NSString *)accessibilityID { + self = [super init]; + if (self) { + _customCell = customCell; + _title = [title copy]; + _value = [value copy]; + _action = action; + if (accessibilityID) { + _accessibilityIdentifier = [accessibilityID copy]; + self.isAccessibilityElement = YES; + } + } + return self; +} + +@end |