UIPickerView UI and functional issue in iPhone 6s plus device

I created a custom TimePicker using a UIPickerView taken from 3 UIPickerView .

  • One for hours
  • One for minutes
  • One for AM / PM

When choosing a time, I use this time to set a local notification. Since my application is based on alarm functionality.

Part of the user interface and functional part work well in the iPhone 5.5s, 6.6 Plus, but face an issue in the iPhone 6s plus. It doesn’t work out what goes wrong! The same code works well on all other devices except the iPhone 6s plus.

Below is a screen shot of the iPhone 6,

enter image description here

As you can see, the ScreenShot time and PickerView time are the same. This is the functional part. I wrote the code, how, to catch the current time and in accordance with the fact that I set the selected PickerView index. Works great! Also I installed the selected index fonts more. Which is also great for iPhone 6.

Below is a screenshot of the iPhone 6s Plus,

enter image description here

As you can see, ScreenShot time and PickerView time PickerView not the same. So the functional part does not work in the iPhone 6s plus. Also, in the user interface part, the fonts become larger for the selected row in the second PickerView , but not in the first.

Also, when I set the local notification, choosing the time from the timer. It also works well (notification activates at an ideal time) on all devices other than the iPhone 6s plus. And on the iPhone 6s plus any time that I choose from UIPickerView , the notification immediately fires.

I don’t know what happens with the iPhone 6s plus. Any problem is related to PickerView or something else. But why does the same code work well for the whole other device, and not just for the iPhone 6s plus.

Any help is appreciated! Badly stuck on this issue. Please help if anyone has a solution to this problem! Thanks in advance.

UPDATE:

Please see my code ...

AddAlarmViewController.h

 @interface AddAlarmViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource> { } @property (strong,nonatomic) NSArray *arrHours; @property (strong,nonatomic) NSArray *arrMinute; @property (strong,nonatomic) NSArray *arrAP; @property (nonatomic,strong) IBOutlet UIPickerView *myPickerHour; @property (nonatomic,strong) IBOutlet UIPickerView *myPickerMinute; @property (nonatomic,strong) IBOutlet UIPickerView *myPickerAP; 

AddAlarmViewController.m

 @interface AddAlarmViewController () { int countH,countM,countAP; } @property (strong,nonatomic) NSString *strTime,*strTimeSlot; @property (strong,nonatomic) NSDate *dateSelected; @property (assign,nonatomic) NSInteger rowHour,rowAP,rowMinute; @property (strong,nonatomic) UILabel *lblHour,*lblMinute,*lblAP; @end @implementation AddAlarmViewController - (void)viewDidLoad { [super viewDidLoad]; countH = 0; countM = 0; countAP = 0; _arrHours = @[[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],[NSNumber numberWithInt:4],[NSNumber numberWithInt:5],[NSNumber numberWithInt:6],[NSNumber numberWithInt:7],[NSNumber numberWithInt:8],[NSNumber numberWithInt:9],[NSNumber numberWithInt:10],[NSNumber numberWithInt:11],[NSNumber numberWithInt:12]]; _arrMinute = @[[NSNumber numberWithInt:0],[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],[NSNumber numberWithInt:3],[NSNumber numberWithInt:4],[NSNumber numberWithInt:5],[NSNumber numberWithInt:6],[NSNumber numberWithInt:7],[NSNumber numberWithInt:8],[NSNumber numberWithInt:9],[NSNumber numberWithInt:10],[NSNumber numberWithInt:11],[NSNumber numberWithInt:12],[NSNumber numberWithInt:13],[NSNumber numberWithInt:14],[NSNumber numberWithInt:15],[NSNumber numberWithInt:16],[NSNumber numberWithInt:17],[NSNumber numberWithInt:18],[NSNumber numberWithInt:19],[NSNumber numberWithInt:20],[NSNumber numberWithInt:21],[NSNumber numberWithInt:22],[NSNumber numberWithInt:23],[NSNumber numberWithInt:24],[NSNumber numberWithInt:25],[NSNumber numberWithInt:26],[NSNumber numberWithInt:27],[NSNumber numberWithInt:28],[NSNumber numberWithInt:29],[NSNumber numberWithInt:30],[NSNumber numberWithInt:31],[NSNumber numberWithInt:32],[NSNumber numberWithInt:33],[NSNumber numberWithInt:34],[NSNumber numberWithInt:35],[NSNumber numberWithInt:36],[NSNumber numberWithInt:37],[NSNumber numberWithInt:38],[NSNumber numberWithInt:39],[NSNumber numberWithInt:40],[NSNumber numberWithInt:41],[NSNumber numberWithInt:42],[NSNumber numberWithInt:43],[NSNumber numberWithInt:44],[NSNumber numberWithInt:45],[NSNumber numberWithInt:46],[NSNumber numberWithInt:47],[NSNumber numberWithInt:48],[NSNumber numberWithInt:49],[NSNumber numberWithInt:50],[NSNumber numberWithInt:51],[NSNumber numberWithInt:52],[NSNumber numberWithInt:53],[NSNumber numberWithInt:54],[NSNumber numberWithInt:55],[NSNumber numberWithInt:56],[NSNumber numberWithInt:57],[NSNumber numberWithInt:58],[NSNumber numberWithInt:59]]; _arrAP = @[@"AM",@"PM"]; [self.myPickerHour reloadAllComponents]; [self.myPickerHour selectRow:_rowHour inComponent:0 animated:YES]; [self.myPickerMinute reloadAllComponents]; [self.myPickerMinute selectRow:_rowMinute inComponent:0 animated:YES]; [self.myPickerAP reloadAllComponents]; [self.myPickerAP selectRow:_rowAP inComponent:0 animated:YES]; } #pragma mark - Picker View Data source -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 1; } -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{ if (pickerView.tag == 1) { return [_arrHours count] * 100; } else if (pickerView.tag == 2) { return [_arrMinute count] * 100; } else { return [_arrAP count]; } } #pragma mark- Picker View Delegate -(void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component { if (pickerView.tag == 1) { NSLog(@" Row Number %ld", row % [_arrHours count]); _lblHour = (UILabel*)[pickerView viewForRow:row forComponent:component]; [_lblHour setFont:[UIFont fontWithName:@"OpenSans-Light" size:70.0]]; [_lblHour setTextColor:[UIColor blackColor]]; NSLog(@"Print selected label of hour : %@",_lblHour.text); if (countH == 4) { isHour = TRUE; //------------------Above and Below Rows------------------// if (row > 0) { UILabel *lbl = (UILabel *)[pickerView viewForRow:row-1 forComponent:component]; [lbl setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lbl.textAlignment = NSTextAlignmentCenter; lbl.textColor = [UIColor darkGrayColor]; } if (row < (_arrHours.count * 100)) { UILabel *lbl1 = (UILabel *)[pickerView viewForRow:row+1 forComponent:component]; [lbl1 setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lbl1.textAlignment = NSTextAlignmentCenter; lbl1.textColor = [UIColor darkGrayColor]; } //-------------------------------------------------------// } } else if (pickerView.tag == 2) { _lblMinute = (UILabel*)[pickerView viewForRow:row forComponent:component]; [_lblMinute setFont:[UIFont fontWithName:@"OpenSans-Light" size:70.0]]; [_lblMinute setTextColor:[UIColor blackColor]]; NSLog(@"Print selected label of minute : %@",_lblMinute.text); if (countM == 4) { isMinute = TRUE; //------------------Above and Below Rows------------------// if (row > 0) { UILabel *lbl = (UILabel *)[pickerView viewForRow:row-1 forComponent:component]; [lbl setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lbl.textAlignment = NSTextAlignmentCenter; lbl.textColor = [UIColor darkGrayColor]; } if (row < (_arrMinute.count * 100)) { UILabel *lbl1 = (UILabel *)[pickerView viewForRow:row+1 forComponent:component]; [lbl1 setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lbl1.textAlignment = NSTextAlignmentCenter; lbl1.textColor = [UIColor darkGrayColor]; } //-------------------------------------------------------// } } else if (pickerView.tag == 3) { _lblAP = (UILabel*)[pickerView viewForRow:row forComponent:component]; [_lblAP setTextColor:[UIColor blackColor]]; NSLog(@"Print selected label of AP : %@",_lblAP.text); } NSLog(@"----------4"); NSDateFormatter *format = [[NSDateFormatter alloc] init]; [format setDateFormat:@"dd/MM/yyyy"]; NSString *str = [format stringFromDate:[NSDate date]]; NSDate *now = [NSDate date]; int daysToAdd = 1; NSDate *newDate1 = [now dateByAddingTimeInterval:60*60*24*daysToAdd]; [format setDateFormat:@"hh:mm a"]; NSString *strHM = [format stringFromDate:now]; NSString *str1 = [NSString stringWithFormat:@"%@:%@ %@",_lblHour.text,_lblMinute.text,_lblAP.text]; NSString *strSelected = [NSString stringWithFormat:@"%@:%@ %@",_lblHour.text,_lblMinute.text,_lblAP.text]; if ([strHM isEqualToString:strSelected]) { [format setDateFormat:@"dd/MM/yyyy"]; NSString *strWithOneDay = [format stringFromDate:newDate1]; _strTime = [NSString stringWithFormat:@"%@ %@",strWithOneDay,str1]; } else { _strTime = [NSString stringWithFormat:@"%@ %@",str,str1]; } [format setDateFormat:@"dd/MM/yyyy hh:mm a"]; _dateSelected = [format dateFromString:_strTime]; if (!(_dateSelected == NULL)) { NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitHour | NSCalendarUnitMinute fromDate:_dateSelected]; NSInteger hour = [components hour]; if(hour >= 3 && hour < 12) { _strTimeSlot = @"GOOD MORNING"; } else if(hour >= 12 && hour < 17) { _strTimeSlot = @"GOOD AFTERNOON"; } else if(hour >= 17 && hour < 20) { _strTimeSlot = @"GOOD EVENING"; } else { _strTimeSlot = @"GOOD NIGHT"; } } } - (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component { if (pickerView.tag == 1 || pickerView.tag == 2) { return 70.0; } return 30.0; } - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UILabel *lblTitle = (id)view; if (pickerView.tag == 1) { [[pickerView.subviews objectAtIndex:1] setHidden:TRUE]; [[pickerView.subviews objectAtIndex:2] setHidden:TRUE]; lblTitle= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)]; [lblTitle setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lblTitle.textAlignment = NSTextAlignmentCenter; lblTitle.textColor = [UIColor darkGrayColor]; if ([[NSString stringWithFormat:@"%@",[_arrHours objectAtIndex:(row % [_arrHours count])]] length] == 1) { NSString *str = [@"0" stringByAppendingString:[NSString stringWithFormat:@"%@",[_arrHours objectAtIndex:(row % [_arrHours count])]]]; lblTitle.text = str; } else { lblTitle.text = [NSString stringWithFormat:@"%@",[_arrHours objectAtIndex:(row % [_arrHours count])]]; } if (row == _rowHour && !isHour) { countH++; [self pickerView:self.myPickerHour didSelectRow:_rowHour inComponent:0]; _lblHour.text = lblTitle.text; } } else if (pickerView.tag == 2) { [[pickerView.subviews objectAtIndex:1] setHidden:TRUE]; [[pickerView.subviews objectAtIndex:2] setHidden:TRUE]; lblTitle= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)]; [lblTitle setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lblTitle.textAlignment = NSTextAlignmentCenter; lblTitle.textColor = [UIColor darkGrayColor]; if ([[NSString stringWithFormat:@"%@",[_arrMinute objectAtIndex:(row % [_arrMinute count])]] length] == 1) { NSString *str = [@"0" stringByAppendingString:[NSString stringWithFormat:@"%@",[_arrMinute objectAtIndex:(row % [_arrMinute count])]]]; lblTitle.text = str; } else { lblTitle.text = [NSString stringWithFormat:@"%@",[_arrMinute objectAtIndex:(row % [_arrMinute count])]]; } if (row == _rowMinute && !isMinute) { countM++; [self pickerView:self.myPickerMinute didSelectRow:_rowMinute inComponent:0]; _lblMinute.text = lblTitle.text; } } else { [[pickerView.subviews objectAtIndex:1] setHidden:TRUE]; [[pickerView.subviews objectAtIndex:2] setHidden:TRUE]; lblTitle= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)]; [lblTitle setFont:[UIFont fontWithName:@"OpenSans-Light" size:16.0]]; lblTitle.textAlignment = NSTextAlignmentCenter; lblTitle.textColor = [UIColor blackColor]; lblTitle.text = [_arrAP objectAtIndex:row]; if (row == _rowAP) { [self pickerView:self.myPickerAP didSelectRow:_rowAP inComponent:0]; _lblAP.text = lblTitle.text; } } return lblTitle; } 
+8
objective-c iphone uipickerview uilocalnotification
source share
1 answer

This answer is for future readers, perhaps this will help someone.

After doing a lot of R and D and debugging the code, finally solved my problem.

The code that I added in my current one (verification code above) is listed below,

 NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; NSDateFormatter *format = [[NSDateFormatter alloc] init]; [format setLocale:locale]; [format setTimeZone:[NSTimeZone systemTimeZone]]; 

Before adding the lines of code above (add these lines where I have ever used NSDateFormatter ), it worked perfectly on all other devices except the iPhone 6s plus. But by setting NSLocale and TimeZone to NSDateFormatter , it works great on ALL devices.

Thanks!

+3
source share

All Articles