From 03d6407e534396647f1edd71725f5dd52ca2251c Mon Sep 17 00:00:00 2001 From: Ortwin Gentz Date: Fri, 5 Mar 2010 01:13:55 +0100 Subject: [PATCH] Improved field layout of MultiValue, TitleValue and Toggle fields; fixed display issue with tableView separator --- .../IASKAppSettingsViewController.m | 24 ++-------- InAppSettingsKit/Models/IASKSettingsReader.h | 7 ++- .../Views/IASKPSTitleValueSpecifierViewCell.h | 14 ++++++ .../Views/IASKPSTitleValueSpecifierViewCell.m | 48 +++++++++++++++++++ .../Xibs/IASKPSSliderSpecifierViewCell.xib | 5 +- .../Xibs/IASKPSTextFieldSpecifierViewCell.xib | 9 ++-- .../IASKPSToggleSwitchSpecifierViewCell.xib | 11 +++-- .../project.pbxproj | 6 +++ .../Settings.bundle/Complete.plist | 44 ++++++++++++++++- 9 files changed, 135 insertions(+), 33 deletions(-) create mode 100644 InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h create mode 100644 InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m diff --git a/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m b/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m index f2e3f45b..3d469e97 100644 --- a/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m +++ b/InAppSettingsKit/Controllers/IASKAppSettingsViewController.m @@ -20,6 +20,7 @@ #import "IASKPSToggleSwitchSpecifierViewCell.h" #import "IASKPSSliderSpecifierViewCell.h" #import "IASKPSTextFieldSpecifierViewCell.h" +#import "IASKPSTitleValueSpecifierViewCell.h" #import "IASKSwitch.h" #import "IASKSlider.h" #import "IASKSpecifier.h" @@ -302,25 +303,17 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } else if ([[specifier type] isEqualToString:kIASKPSMultiValueSpecifier]) { - UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSMultiValueSpecifier] autorelease]; + UITableViewCell *cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSMultiValueSpecifier] autorelease]; [[cell textLabel] setText:[specifier title]]; [[cell detailTextLabel] setText:[[specifier titleForCurrentValue:[[NSUserDefaults standardUserDefaults] objectForKey:key] != nil ? [[NSUserDefaults standardUserDefaults] objectForKey:key] : [specifier defaultValue]] description]]; - // left align the value if the title is empty - if (!specifier.title.length) { - cell.textLabel.text = cell.detailTextLabel.text; - cell.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]]; - cell.textLabel.textColor = cell.detailTextLabel.textColor; - cell.detailTextLabel.text = nil; - } - [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; return cell; } else if ([[specifier type] isEqualToString:kIASKPSTitleValueSpecifier]) { - UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSTitleValueSpecifier] autorelease]; + UITableViewCell *cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSTitleValueSpecifier] autorelease]; cell.textLabel.text = [specifier title]; id value = [[NSUserDefaults standardUserDefaults] objectForKey:key] ? : [specifier defaultValue]; @@ -333,15 +326,6 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N cell.detailTextLabel.text = stringValue; - // left align the value if the title is empty - if (!specifier.title.length) { - cell.textLabel.text = cell.detailTextLabel.text; - cell.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]]; - cell.textLabel.textColor = cell.detailTextLabel.textColor; - cell.detailTextLabel.text = nil; - } - cell.textLabel.adjustsFontSizeToFitWidth = YES; - [cell setUserInteractionEnabled:NO]; [cell setAccessoryType:UITableViewCellAccessoryNone]; return cell; @@ -398,7 +382,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N return cell; } else if ([[specifier type] isEqualToString:kIASKPSChildPaneSpecifier]) { - UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSChildPaneSpecifier] autorelease]; + UITableViewCell *cell = [[[IASKPSTitleValueSpecifierViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:kIASKPSChildPaneSpecifier] autorelease]; [[cell textLabel] setText:[specifier title]]; //NSLog(@"[specifier file]: %@", [specifier file]); [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator]; diff --git a/InAppSettingsKit/Models/IASKSettingsReader.h b/InAppSettingsKit/Models/IASKSettingsReader.h index 4c8b63a4..d252ca35 100644 --- a/InAppSettingsKit/Models/IASKSettingsReader.h +++ b/InAppSettingsKit/Models/IASKSettingsReader.h @@ -70,8 +70,13 @@ #define kIASKSliderOneImageWidth 246 #define kIASKTableWidth 320 -#define kIASKSpacing 9 +#define kIASKSpacing 5 #define kIASKMinLabelWidth 97 +#define kIASKMinValueWidth 35 +#define kIASKPaddingLeft 9 +#define kIASKPaddingRight 10 + +#define kIASKLabelFontSize 17 @class IASKSpecifier; diff --git a/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h b/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h new file mode 100644 index 00000000..2678852a --- /dev/null +++ b/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.h @@ -0,0 +1,14 @@ +// +// IASKPSTitleValueSpecifierViewCell.h +// InAppSettingsKitSampleApp +// +// Created by Ortwin Gentz on 04.03.10. +// Copyright 2010 FutureTap. All rights reserved. +// + +#import + + +@interface IASKPSTitleValueSpecifierViewCell : UITableViewCell + +@end diff --git a/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m b/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m new file mode 100644 index 00000000..9df67eeb --- /dev/null +++ b/InAppSettingsKit/Views/IASKPSTitleValueSpecifierViewCell.m @@ -0,0 +1,48 @@ +// +// IASKPSTitleValueSpecifierViewCell.m +// InAppSettingsKitSampleApp +// +// Created by Ortwin Gentz on 04.03.10. +// Copyright 2010 FutureTap. All rights reserved. +// + +#import "IASKPSTitleValueSpecifierViewCell.h" +#import "IASKSettingsReader.h" + + +@implementation IASKPSTitleValueSpecifierViewCell + +- (void)layoutSubviews { + // left align the value if the title is empty + if (!self.textLabel.text.length) { + self.textLabel.text = self.detailTextLabel.text; + self.detailTextLabel.text = nil; + if ([self.reuseIdentifier isEqualToString:kIASKPSMultiValueSpecifier]) { + self.textLabel.font = [UIFont systemFontOfSize:[UIFont labelFontSize]]; + self.textLabel.textColor = self.detailTextLabel.textColor; + } + } + [super layoutSubviews]; + + CGFloat viewWidth = [self.textLabel superview].frame.size.width; + + // set the left title label frame + CGFloat labelWidth = [self.textLabel sizeThatFits:CGSizeZero].width; + labelWidth = MIN(labelWidth, viewWidth - kIASKMinValueWidth - kIASKPaddingLeft - kIASKSpacing -kIASKPaddingRight); + CGRect labelFrame = self.textLabel.frame; + labelFrame.origin.x = kIASKPaddingLeft; + labelFrame.size.width = labelWidth; + labelFrame.size.height -= 2; + self.textLabel.frame = labelFrame; + + // set the right value label frame + if (self.detailTextLabel.text.length) { + CGRect valueFrame = self.detailTextLabel.frame; + valueFrame.origin.x = kIASKPaddingLeft + labelWidth + kIASKSpacing; + valueFrame.size.width = viewWidth - valueFrame.origin.x - kIASKPaddingRight; + valueFrame.size.height -= 2; + self.detailTextLabel.frame = valueFrame; + } +} + +@end diff --git a/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib b/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib index fba0d512..a221fd24 100644 --- a/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib +++ b/InAppSettingsKit/Xibs/IASKPSSliderSpecifierViewCell.xib @@ -37,7 +37,7 @@ - 292 + 290 YES @@ -59,7 +59,7 @@ - 292 + 289 {{278, 13}, {21, 21}} NO @@ -96,6 +96,7 @@ 1 MSAxIDEAA + YES NO 1 diff --git a/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib b/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib index 64012e62..d2ce9d75 100644 --- a/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib +++ b/InAppSettingsKit/Xibs/IASKPSTextFieldSpecifierViewCell.xib @@ -37,7 +37,7 @@ - 292 + 290 YES @@ -90,7 +90,7 @@ - {320, 43} + {320, 44} 3 @@ -102,12 +102,13 @@ YES - {320, 44} + {320, 45} 1 MSAxIDEAA + YES NO 1 0 @@ -193,7 +194,7 @@ YES UIResponder IASKPSTextFieldSpecifierViewCell - {{105, 513}, {320, 44}} + {{105, 512}, {320, 45}} com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin IASKTextField diff --git a/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib b/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib index a70fe337..f59e3ade 100644 --- a/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib +++ b/InAppSettingsKit/Xibs/IASKPSToggleSwitchSpecifierViewCell.xib @@ -37,7 +37,7 @@ - 292 + 290 YES @@ -47,8 +47,8 @@ YES - 292 - {{10, 10}, {182, 21}} + 294 + {{9, 10}, {200, 21}} NO YES @@ -69,8 +69,8 @@ - 292 - {{198, 8}, {94, 27}} + 289 + {{218, 8}, {94, 27}} NO YES @@ -98,6 +98,7 @@ 1 MSAxIDEAA + YES NO 1 0 diff --git a/InAppSettingsKitSampleApp/InAppSettingsKitSampleApp.xcodeproj/project.pbxproj b/InAppSettingsKitSampleApp/InAppSettingsKitSampleApp.xcodeproj/project.pbxproj index 12dbad35..4b384c96 100755 --- a/InAppSettingsKitSampleApp/InAppSettingsKitSampleApp.xcodeproj/project.pbxproj +++ b/InAppSettingsKitSampleApp/InAppSettingsKitSampleApp.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; 288765590DF743DE002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765580DF743DE002DB57D /* CoreGraphics.framework */; }; 289233AE0DB2D0DB0083E9F9 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 289233A90DB2D0DB0083E9F9 /* MainViewController.m */; }; + AA87D1DD113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AA87D1DC113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.m */; }; AA8D0ED51136E17600EEB1C6 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AA8D0ED31136E17600EEB1C6 /* MainWindow.xib */; }; DA33F59510BC2222004736E8 /* IASKAppSettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA33F57A10BC2222004736E8 /* IASKAppSettingsViewController.m */; }; DA33F59610BC2222004736E8 /* IASKSpecifierValuesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA33F57C10BC2222004736E8 /* IASKSpecifierValuesViewController.m */; }; @@ -44,6 +45,8 @@ 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 32CA4F630368D1EE00C91783 /* InAppSettingsKitSampleApp_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InAppSettingsKitSampleApp_Prefix.pch; sourceTree = ""; }; 8D1107310486CEB800E47090 /* InAppSettingsKitSampleApp-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "InAppSettingsKitSampleApp-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = ""; }; + AA87D1DB113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKPSTitleValueSpecifierViewCell.h; sourceTree = ""; }; + AA87D1DC113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKPSTitleValueSpecifierViewCell.m; sourceTree = ""; }; AA8D0ED41136E17600EEB1C6 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainWindow.xib; sourceTree = ""; }; AA8D0ED61136E18200EEB1C6 /* German */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = German; path = German.lproj/MainWindow.xib; sourceTree = ""; }; DA33F57910BC2222004736E8 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = ""; }; @@ -198,6 +201,8 @@ DA33F58610BC2222004736E8 /* IASKPSTextFieldSpecifierViewCell.m */, DA33F58710BC2222004736E8 /* IASKPSToggleSwitchSpecifierViewCell.h */, DA33F58810BC2222004736E8 /* IASKPSToggleSwitchSpecifierViewCell.m */, + AA87D1DB113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.h */, + AA87D1DC113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.m */, DA33F58910BC2222004736E8 /* IASKSlider.h */, DA33F58A10BC2222004736E8 /* IASKSlider.m */, DA33F58B10BC2222004736E8 /* IASKSwitch.h */, @@ -316,6 +321,7 @@ DA33F59C10BC2222004736E8 /* IASKSlider.m in Sources */, DA33F59D10BC2222004736E8 /* IASKSwitch.m in Sources */, DA33F59E10BC2222004736E8 /* IASKTextField.m in Sources */, + AA87D1DD113FB0FA00101881 /* IASKPSTitleValueSpecifierViewCell.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/InAppSettingsKitSampleApp/Settings.bundle/Complete.plist b/InAppSettingsKitSampleApp/Settings.bundle/Complete.plist index f9fcbec9..342e50c9 100644 --- a/InAppSettingsKitSampleApp/Settings.bundle/Complete.plist +++ b/InAppSettingsKitSampleApp/Settings.bundle/Complete.plist @@ -204,7 +204,7 @@ Key title_long DefaultValue - Value with a very long text + Value with a very, very long text Type PSTitleValueSpecifier @@ -230,6 +230,26 @@ Three + + Title + Title with a very, very loong label + Key + title_longtitle + DefaultValue + Value is long, too + Type + PSTitleValueSpecifier + + + Title + + Key + title_withoutlabel + DefaultValue + Title without label + Type + PSTitleValueSpecifier + Title Unexisting lookup entry @@ -398,6 +418,28 @@ Three + + Type + PSMultiValueSpecifier + Title + Multi Value with a long title + Key + multivalue_long + DefaultValue + 2 + Values + + 1 + 2 + 3 + + Titles + + One + Two + Three + + Type PSMultiValueSpecifier