diff --git a/extras/QPickerTableViewCell.m b/extras/QPickerTableViewCell.m index 444ee5dc..4bfc7fc5 100644 --- a/extras/QPickerTableViewCell.m +++ b/extras/QPickerTableViewCell.m @@ -19,7 +19,7 @@ @implementation QPickerTableViewCell - (QPickerTableViewCell *)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { - if ((self = [self initWithStyle:style reuseIdentifier:reuseIdentifier])) + if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) { [self createSubviews]; self.selectionStyle = UITableViewCellSelectionStyleBlue; diff --git a/quickdialog/QDateInlineTableViewCell.m b/quickdialog/QDateInlineTableViewCell.m index e830d781..893c38af 100644 --- a/quickdialog/QDateInlineTableViewCell.m +++ b/quickdialog/QDateInlineTableViewCell.m @@ -41,7 +41,7 @@ - (void)prepareDateTimePicker:(QDateTimeInlineElement *)element if (!self.pickerView) self.pickerView = [[UIDatePicker alloc] init]; - self.pickerView.timeZone = [NSTimeZone localTimeZone]; + self.pickerView.timeZone = element.timezone; [self.pickerView sizeToFit]; self.pickerView.datePickerMode = element.mode; self.pickerView.maximumDate = element.maximumDate; @@ -68,6 +68,7 @@ - (void) dateChanged:(id)sender{ - (void)prepareForElement:(QDateTimeInlineElement *)element inTableView:(QuickDialogTableView *)tableView { NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + dateFormatter.timeZone = element.timezone; self.element = element; if (element.customDateFormat!=nil){ diff --git a/quickdialog/QDateTimeInlineElement.h b/quickdialog/QDateTimeInlineElement.h index c787e3d3..3e315efa 100755 --- a/quickdialog/QDateTimeInlineElement.h +++ b/quickdialog/QDateTimeInlineElement.h @@ -19,6 +19,7 @@ @interface QDateTimeInlineElement : QEntryElement { NSDate * _dateValue; @private + NSTimeZone *_timezone; UIDatePickerMode _mode; NSInteger _minuteInterval; BOOL _centerLabel; @@ -29,6 +30,8 @@ @property (assign) UIDatePickerMode mode; +@property (nonatomic, strong) NSTimeZone *timezone; + @property (assign) NSInteger minuteInterval; @property(nonatomic) BOOL centerLabel; @@ -43,4 +46,6 @@ - (QDateTimeInlineElement *)initWithTitle:(NSString *)string date:(NSDate *)date andMode:(UIDatePickerMode)mode; +- (QDateTimeInlineElement *)initWithTitle:(NSString *)string date:(NSDate *)date timezone:(NSTimeZone *)timezone andMode:(UIDatePickerMode)mode; + @end diff --git a/quickdialog/QDateTimeInlineElement.m b/quickdialog/QDateTimeInlineElement.m index b608eb24..d22d16bb 100755 --- a/quickdialog/QDateTimeInlineElement.m +++ b/quickdialog/QDateTimeInlineElement.m @@ -25,6 +25,7 @@ @implementation QDateTimeInlineElement { } @synthesize mode = _mode; +@synthesize timezone = _timezone; @synthesize centerLabel = _centerLabel; @synthesize maximumDate = _maximumDate; @synthesize minimumDate = _minimumDate; @@ -46,15 +47,24 @@ - (QDateTimeInlineElement *)initWithKey:(NSString *)key { return self; } -- (QDateTimeInlineElement *)initWithTitle:(NSString *)string date:(NSDate *)date andMode:(UIDatePickerMode)mode{ +- (QDateTimeInlineElement *)initWithTitle:(NSString *)string date:(NSDate *)date timezone:(NSTimeZone *)timezone andMode:(UIDatePickerMode)mode { self = [super initWithTitle:string Value:[date description]]; if (self!=nil){ _dateValue = date; _mode = mode; + _timezone = timezone; } return self; + +} + +- (QDateTimeInlineElement *)initWithTitle:(NSString *)string date:(NSDate *)date andMode:(UIDatePickerMode)mode{ + return [self initWithTitle:string date:date timezone:nil andMode:mode]; } +- (QDateTimeInlineElement *)initWithDate:(NSDate *)date andMode:(UIDatePickerMode)mode{ + return [self initWithTitle:nil date:date andMode:mode]; +} - (void)setTicksValue:(NSNumber *)ticks { if (ticks!=nil) @@ -69,6 +79,7 @@ - (NSDate *)dateValue { if (self.mode == UIDatePickerModeDate) { NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; + gregorian.timeZone = _timezone; NSDateComponents *dateComponents = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:_dateValue]; _dateValue = [gregorian dateFromComponents:dateComponents]; } @@ -79,10 +90,6 @@ -(NSNumber *)ticksValue { return [NSNumber numberWithDouble:[self.dateValue timeIntervalSince1970]]; } -- (QDateTimeInlineElement *)initWithDate:(NSDate *)date andMode:(UIDatePickerMode)mode{ - return [self initWithTitle:nil date:date andMode:mode]; -} - - (UITableViewCell *)getCellForTableView:(QuickDialogTableView *)tableView controller:(QuickDialogController *)controller { QTableViewCell *cell= self.showPickerInCell ? [self getInlineCell:tableView] : [self getEntryCell:tableView]; diff --git a/quickdialog/QEntryTableViewCell.m b/quickdialog/QEntryTableViewCell.m index 959c5b18..8a5e0401 100644 --- a/quickdialog/QEntryTableViewCell.m +++ b/quickdialog/QEntryTableViewCell.m @@ -36,7 +36,6 @@ -(UIToolbar *)createActionBar { _prevNext = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:NSLocalizedString(@"Previous", @""), NSLocalizedString(@"Next", @""), nil]]; _prevNext.momentary = YES; _prevNext.segmentedControlStyle = UISegmentedControlStyleBar; - _prevNext.tintColor = actionBar.tintColor; [_prevNext addTarget:self action:@selector(handleActionBarPreviousNext:) forControlEvents:UIControlEventValueChanged]; UIBarButtonItem *prevNextWrapper = [[UIBarButtonItem alloc] initWithCustomView:_prevNext]; UIBarButtonItem *flexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; @@ -143,6 +142,10 @@ - (void)prepareForElement:(QEntryElement *)element inTableView:(QuickDialogTable _textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; _textField.textAlignment = _entryElement.appearance.entryAlignment; + // workaround for UITextField bug: if the user is using a bigger system font, a long text won't scroll + _textField.adjustsFontSizeToFitWidth = YES; + _textField.minimumFontSize = 20.0f; + _textField.returnKeyType = _entryElement.returnKeyType; _textField.enablesReturnKeyAutomatically = _entryElement.enablesReturnKeyAutomatically; diff --git a/quickdialog/QMultilineElement.m b/quickdialog/QMultilineElement.m index 990c4ee2..bc4e242a 100644 --- a/quickdialog/QMultilineElement.m +++ b/quickdialog/QMultilineElement.m @@ -68,7 +68,7 @@ - (void)selected:(QuickDialogTableView *)tableView controller:(QuickDialogContro __weak QMultilineTextViewController *weakTextController = textController; textController.willDisappearCallback = ^ { weakSelf.textValue = weakTextController.textView.text; - [[tableView cellForElement:weakSelf] setNeedsDisplay]; + [tableView reloadCellForElements:weakSelf, nil]; [tableView deselectRowAtIndexPath:indexPath animated:YES]; }; [controller displayViewController:textController withPresentationMode:self.presentationMode]; diff --git a/quickdialog/QMultilineTextViewController.m b/quickdialog/QMultilineTextViewController.m index 329bb8b1..be8d5cfb 100644 --- a/quickdialog/QMultilineTextViewController.m +++ b/quickdialog/QMultilineTextViewController.m @@ -50,13 +50,6 @@ - (void)loadView self.view = _textView; } -- (void)viewDidLoad -{ - [super viewDidLoad]; - if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) - self.edgesForExtendedLayout = UIRectEdgeNone; -} - - (void)viewWillAppear:(BOOL)animated { _viewOnScreen = YES; @@ -102,7 +95,7 @@ - (void) resizeForKeyboard:(NSNotification*)aNotification { [UIView animateWithDuration:animationDuration delay:0 options:animationCurve animations:^{ CGRect keyboardFrame = [self.view convertRect:keyboardEndFrame toView:nil]; - _textView.contentInset = UIEdgeInsetsMake(0.0, 0.0, up ? keyboardFrame.size.height : 0, 0.0); + _textView.contentInset = UIEdgeInsetsMake(_textView.contentInset.top, _textView.contentInset.left, up ? keyboardFrame.size.height : 0, _textView.contentInset.right); } completion:NULL]; }