0,0 → 1,155 |
// |
// InAppSettingsTableCell.m |
// InAppSettingsTestApp |
// |
// Created by David Keegan on 11/21/09. |
// Copyright 2009 InScopeApps{+}. All rights reserved. |
// |
|
#import "InAppSettingsTableCell.h" |
#import "InAppSettingsConstants.h" |
|
@implementation InAppSettingsTableCell |
|
@synthesize setting; |
@synthesize titleLabel, valueLabel; |
@synthesize valueInput; |
@synthesize canSelectCell; |
|
#pragma mark Cell lables |
|
- (void)setTitle{ |
self.titleLabel.text = [self.setting localizedTitle]; |
|
CGSize titleSize = [self.titleLabel.text sizeWithFont:self.titleLabel.font]; |
|
CGFloat maxTitleWidth = InAppSettingsCellTitleMaxWidth; |
if([self.setting isType:InAppSettingsPSToggleSwitchSpecifier]){ |
maxTitleWidth = InAppSettingsCellTitleMaxWidth-(InAppSettingsCellToggleSwitchWidth+InAppSettingsCellPadding); |
}else if(self.accessoryType == UITableViewCellAccessoryDisclosureIndicator){ |
maxTitleWidth = InAppSettingsCellTitleMaxWidth-(InAppSettingsCellDisclosureIndicatorWidth+InAppSettingsCellPadding); |
} |
if(titleSize.width > maxTitleWidth){ |
titleSize.width = maxTitleWidth; |
} |
|
CGRect titleFrame = self.titleLabel.frame; |
titleFrame.size = titleSize; |
titleFrame.origin.x = InAppSettingsCellPadding; |
titleFrame.origin.y = (CGFloat)round((self.contentView.frame.size.height*0.5f)-(titleSize.height*0.5f))-InAppSettingsOffsetY; |
self.titleLabel.frame = titleFrame; |
} |
|
- (void)setDetail{ |
[self setDetail:[self.setting getValue]]; |
} |
|
- (void)setDetail:(NSString *)detail{ |
//the detail is not localized |
self.valueLabel.text = detail; |
|
CGSize valueSize = [self.valueLabel.text sizeWithFont:self.valueLabel.font]; |
|
CGRect valueFrame = self.valueLabel.frame; |
CGFloat titleRightSide = self.titleLabel.frame.size.width+InAppSettingsTablePadding; |
if([self.setting isType:InAppSettingsPSMultiValueSpecifier] && [[self.setting localizedTitle] length] == 0){ |
valueFrame.origin.x = InAppSettingsCellPadding; |
}else{ |
valueFrame.origin.x = (InAppSettingsScreenWidth-(InAppSettingsTotalTablePadding+InAppSettingsCellPadding))-valueSize.width; |
if(self.accessoryType == UITableViewCellAccessoryDisclosureIndicator){ |
valueFrame.origin.x -= InAppSettingsCellDisclosureIndicatorWidth+InAppSettingsCellPadding; |
} |
if(titleRightSide >= valueFrame.origin.x){ |
valueFrame.origin.x = titleRightSide; |
} |
} |
valueFrame.origin.y = (CGFloat)round((self.contentView.frame.size.height*0.5f)-(valueSize.height*0.5f))-InAppSettingsOffsetY; |
valueFrame.size.width = InAppSettingsScreenWidth-(valueFrame.origin.x+InAppSettingsTotalTablePadding+InAppSettingsCellPadding); |
if(self.accessoryType == UITableViewCellAccessoryDisclosureIndicator){ |
valueFrame.size.width -= InAppSettingsCellDisclosureIndicatorWidth+InAppSettingsCellPadding; |
} |
|
//if the width is less then 0 just hide the label |
if(valueFrame.size.width <= 0){ |
self.valueLabel.hidden = YES; |
}else{ |
self.valueLabel.hidden = NO; |
} |
valueFrame.size.height = valueSize.height; |
self.valueLabel.frame = valueFrame; |
} |
|
- (void)setDisclosure:(BOOL)disclosure{ |
if(disclosure){ |
self.accessoryType = UITableViewCellAccessoryDisclosureIndicator; |
} |
else{ |
self.accessoryType = UITableViewCellAccessoryNone; |
} |
} |
|
- (void)setCanSelectCell:(BOOL)value{ |
if(value){ |
self.selectionStyle = UITableViewCellSelectionStyleBlue; |
}else{ |
self.selectionStyle = UITableViewCellSelectionStyleNone; |
} |
canSelectCell = value; |
} |
|
#pragma mark - |
|
- (id)initWithReuseIdentifier:(NSString *)reuseIdentifier{ |
//the docs say UITableViewCellStyleValue1 is used for settings, |
//but it doesn't look 100% the same so we will just draw our own UILabels |
#if InAppSettingsUseNewCells |
self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]; |
#else |
self = [super initWithFrame:CGRectZero reuseIdentifier:reuseIdentifier]; |
#endif |
|
if(self != nil){ |
self.canSelectCell = NO; |
} |
|
return self; |
} |
|
#pragma mark implement in cell |
|
- (void)setUIValues{ |
//implement this per cell type |
} |
|
- (void)setValueDelegate:(id)delegate{ |
//implement in cell |
} |
|
- (void)setupCell{ |
//setup title label |
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
self.titleLabel.font = InAppSettingsBoldFont; |
self.titleLabel.highlightedTextColor = [UIColor whiteColor]; |
self.titleLabel.backgroundColor = [UIColor clearColor]; |
// self.titleLabel.backgroundColor = [UIColor greenColor]; |
[self.contentView addSubview:self.titleLabel]; |
|
//setup value label |
self.valueLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
self.valueLabel.font = InAppSettingsNormalFont; |
self.valueLabel.textColor = InAppSettingsBlue; |
self.valueLabel.highlightedTextColor = [UIColor whiteColor]; |
self.valueLabel.backgroundColor = [UIColor clearColor]; |
// self.valueLabel.backgroundColor = [UIColor redColor]; |
[self.contentView addSubview:self.valueLabel]; |
} |
|
- (void)dealloc{ |
[setting release]; |
[titleLabel release]; |
[valueLabel release]; |
self.valueInput = nil; |
[super dealloc]; |
} |
|
@end |