From 2bba4919a83d96f4c65f070f7e7e1d1bc1102218 Mon Sep 17 00:00:00 2001 From: Roman Efimov Date: Thu, 7 Mar 2013 15:30:19 -0600 Subject: [PATCH] iPad optimizations --- .../Cells/RETableViewCreditCardCell.m | 29 ++++++++++++++++--- .../Cells/RETableViewTextCell.m | 10 +++---- RETableViewManager/RETableViewCellStyle.m | 2 +- .../project.pbxproj | 4 +++ .../ControlsViewController.m | 4 +++ 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/RETableViewManager/Cells/RETableViewCreditCardCell.m b/RETableViewManager/Cells/RETableViewCreditCardCell.m index 288e5c8..1249355 100644 --- a/RETableViewManager/Cells/RETableViewCreditCardCell.m +++ b/RETableViewManager/Cells/RETableViewCreditCardCell.m @@ -18,7 +18,7 @@ static inline NSString *RECreditCardType(NSString *creditCardNumber) NSDictionary *types = @{@"Visa": @"^4[0-9]{12}(?:[0-9]{2})?", @"MasterCard": @"^5[1-5][0-9]{13}", - @"AmericanExpress": @"^3[47][0-9]{12}", + @"Amex": @"^3[47][0-9]{12}", @"Discover": @"^6(?:011|5[0-9]{2})[0-9]{11}"}; for (NSString *type in types) { @@ -35,7 +35,7 @@ static inline NSString *RECreditCardType(NSString *creditCardNumber) if (self) { self.selectionStyle = UITableViewCellSelectionStyleNone; self.textLabel.backgroundColor = [UIColor clearColor]; - _creditCardImageViewContainer = [[UIView alloc] initWithFrame:CGRectMake(20, 5, 32, 32)]; + _creditCardImageViewContainer = [[UIView alloc] initWithFrame:CGRectMake(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ? 20 : 56, 5, 32, 32)]; [self addSubview:_creditCardImageViewContainer]; _creditCardStackImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; @@ -53,7 +53,7 @@ static inline NSString *RECreditCardType(NSString *creditCardNumber) _creditCardBackImageView.image = [UIImage imageNamed:@"RETableViewManager.bundle/Card_Back"]; _creditCardBackImageView.tag = 2; - _wrapperView = [[UIView alloc] initWithFrame:CGRectMake(60 + _textFieldPositionOffset.width, _textFieldPositionOffset.height + 1, self.frame.size.width - 70, self.frame.size.height)]; + _wrapperView = [[UIView alloc] initWithFrame:CGRectMake(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone ? 60 : 96 + _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 70, self.frame.size.height)]; _wrapperView.clipsToBounds = YES; [self addSubview:_wrapperView]; @@ -120,6 +120,24 @@ static inline NSString *RECreditCardType(NSString *creditCardNumber) - (void)layoutSubviews { [super layoutSubviews]; + [_creditCardField sizeToFit]; + [_expirationDateField sizeToFit]; + [_cvvField sizeToFit]; + + CGRect frame = _creditCardField.frame; + frame.size.width += 40; + frame.size.height = self.frame.size.height; + _creditCardField.frame = frame; + + frame = _expirationDateField.frame; + frame.size.width += 40; + frame.size.height = self.frame.size.height; + _expirationDateField.frame = frame; + + frame = _cvvField.frame; + frame.size.width += 40; + frame.size.height = self.frame.size.height; + _cvvField.frame = frame; } - (UIResponder *)responder @@ -161,7 +179,10 @@ static inline NSString *RECreditCardType(NSString *creditCardNumber) [_expirationDateField becomeFirstResponder]; __typeof(&*self) __weak weakSelf = self; [UIView animateWithDuration:0.1 animations:^{ - weakSelf.creditCardField.frame = CGRectMake(-120, weakSelf.creditCardField.frame.origin.y, weakSelf.creditCardField.frame.size.width, weakSelf.creditCardField.frame.size.height); + + NSString *substring = [textField.text substringToIndex:textField.text.length - (isAmex ? 3 : 4)]; + CGSize size = [substring sizeWithFont:textField.font]; + weakSelf.creditCardField.frame = CGRectMake(-size.width, weakSelf.creditCardField.frame.origin.y, weakSelf.creditCardField.frame.size.width, weakSelf.creditCardField.frame.size.height); weakSelf.expirationDateField.frame = CGRectMake(CGRectGetMaxX(_creditCardField.frame), weakSelf.expirationDateField.frame.origin.y, weakSelf.expirationDateField.frame.size.width, weakSelf.expirationDateField.frame.size.height); weakSelf.cvvField.frame = CGRectMake(CGRectGetMaxX(_expirationDateField.frame), weakSelf.cvvField.frame.origin.y, weakSelf.cvvField.frame.size.width, weakSelf.cvvField.frame.size.height); }]; diff --git a/RETableViewManager/Cells/RETableViewTextCell.m b/RETableViewManager/Cells/RETableViewTextCell.m index 130e162..aa491eb 100644 --- a/RETableViewManager/Cells/RETableViewTextCell.m +++ b/RETableViewManager/Cells/RETableViewTextCell.m @@ -37,7 +37,7 @@ if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) _textField = [[UITextField alloc] initWithFrame:CGRectMake(140, 0, self.frame.size.width - 160, self.frame.size.height)]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - _textField = [[UITextField alloc] initWithFrame:CGRectMake(160, 0, self.frame.size.width - 200, self.frame.size.height)]; + _textField = [[UITextField alloc] initWithFrame:CGRectMake(180, 0, self.frame.size.width - 200, self.frame.size.height)]; _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; _textField.inputAccessoryView = self.actionBar; @@ -87,14 +87,14 @@ [super layoutSubviews]; if (self.item.title) { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) - _textField.frame = CGRectMake(140 + _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 160, self.frame.size.height - _textFieldPositionOffset.height); + _textField.frame = CGRectMake(140 + _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 160 - _textFieldPositionOffset.width, self.frame.size.height - _textFieldPositionOffset.height); if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - _textField.frame = CGRectMake(160+ _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 200, self.frame.size.height - _textFieldPositionOffset.height); + _textField.frame = CGRectMake(160+ _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 200 - _textFieldPositionOffset.width, self.frame.size.height - _textFieldPositionOffset.height); } else { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) - _textField.frame = CGRectMake(20+ _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 40, self.frame.size.height - _textFieldPositionOffset.height); + _textField.frame = CGRectMake(20 + _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 40 - _textFieldPositionOffset.width, self.frame.size.height - _textFieldPositionOffset.height); if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) - _textField.frame = CGRectMake(40+ _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 80, self.frame.size.height - _textFieldPositionOffset.height); + _textField.frame = CGRectMake(40 + _textFieldPositionOffset.width, _textFieldPositionOffset.height, self.frame.size.width - 80 - _textFieldPositionOffset.width, self.frame.size.height - _textFieldPositionOffset.height); } } diff --git a/RETableViewManager/RETableViewCellStyle.m b/RETableViewManager/RETableViewCellStyle.m index 2d3fcac..69f57e2 100644 --- a/RETableViewManager/RETableViewCellStyle.m +++ b/RETableViewManager/RETableViewCellStyle.m @@ -34,7 +34,7 @@ return nil; _backgroundImages = [[NSMutableDictionary alloc] init]; - _textFieldFont = [UIFont systemFontOfSize:15]; + _textFieldFont = [UIFont systemFontOfSize:17]; _cellHeight = 44; return self; diff --git a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj index 11ccc8b..232ea2a 100644 --- a/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj +++ b/RETableViewManagerExample/RETableViewManagerExample.xcodeproj/project.pbxproj @@ -397,7 +397,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "RETableViewManagerExample/RETableViewManagerExample-Prefix.pch"; INFOPLIST_FILE = "RETableViewManagerExample/RETableViewManagerExample-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; WRAPPER_EXTENSION = app; }; name = Debug; @@ -408,7 +410,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "RETableViewManagerExample/RETableViewManagerExample-Prefix.pch"; INFOPLIST_FILE = "RETableViewManagerExample/RETableViewManagerExample-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 6.1; PRODUCT_NAME = "$(TARGET_NAME)"; + TARGETED_DEVICE_FAMILY = 1; WRAPPER_EXTENSION = app; }; name = Release; diff --git a/RETableViewManagerExample/RETableViewManagerExample/ControlsViewController.m b/RETableViewManagerExample/RETableViewManagerExample/ControlsViewController.m index 19e062e..31bf107 100644 --- a/RETableViewManagerExample/RETableViewManagerExample/ControlsViewController.m +++ b/RETableViewManagerExample/RETableViewManagerExample/ControlsViewController.m @@ -22,16 +22,20 @@ // Create manager // _manager = [[RETableViewManager alloc] init]; + _manager.style.textFieldPositionOffset = CGSizeMake(40, 0); RETableViewSection *section = [[RETableViewSection alloc] initWithHeaderTitle:@"Basic controls"]; [_manager addSection:section]; + [section addItem:[RETextItem itemWithTitle:nil value:nil placeholder:@"Full length text field"]]; [section addItem:[RETextItem itemWithTitle:@"Text item 1" value:nil placeholder:@"Text"]]; [section addItem:[RETextItem itemWithTitle:@"Text item 2" value:nil placeholder:@"Text"]]; [section addItem:[RETextItem itemWithTitle:@"Text item 3" value:nil placeholder:@"Text"]]; [section addItem:[RETextItem itemWithTitle:@"Text item 4" value:nil placeholder:@"Text"]]; [section addItem:[REBoolItem itemWithTitle:@"Bool item" value:YES]]; + section = [[RETableViewSection alloc] initWithHeaderTitle:@"Credit card"]; + [_manager addSection:section]; [section addItem:[RECreditCardItem item]]; // Set delegate and datasource