Я создал собственный TimePicker, используя UIPickerView
, взял 3 UIPickerView
.
- Один на несколько часов
- Один на минуты
- Один для AM / PM
Выбирая время, я использую это время для установки локального уведомления. Потому что мое приложение основано на функциональности будильника.
Часть пользовательского интерфейса и функциональная часть хорошо работают на iPhone 5,5s,6,6 Plus, но сталкиваются с проблемой на устройстве iPhone 6s plus. Не понять, что происходит! Тот же код хорошо работает на всех других устройствах, кроме iPhone 6s plus.
На снимке экрана ниже показан iPhone 6.
Как видите, время ScreenShot и время PickerView совпадают. Это функциональная часть. Я написал код, например, ловлю текущее время, и в соответствии с этим я установил выбранный индекс PickerView. Работает идеально! Также я увеличил выбранные индексные шрифты. Который также отлично смотрится на устройстве iPhone 6.
На снимке экрана ниже показан iPhone 6s Plus.
Как видите, время ScreenShot и время PickerView
не совпадают. Итак, функциональная часть не работает в устройстве iPhone 6s plus. Также в части пользовательского интерфейса шрифты становятся больше для выбранной строки во второй PickerView
, но не в первой.
Также, когда я устанавливаю локальное уведомление, выбирая время из средства выбора времени. Он также хорошо работает (уведомление срабатывает вовремя) на всех других устройствах, кроме iPhone 6s plus. А в iPhone 6s plus любое время, которое я выбираю из UIPickerView
, уведомление срабатывает немедленно.
Не знаю, что происходит с устройством iPhone 6s plus. Либо проблема связана с PickerView, либо с чем-то еще. Но почему тот же код хорошо работает для всех других устройств, а не только для устройства iPhone 6s plus.
Любая помощь приветствуется! Сильно застрял в этом вопросе. Пожалуйста, помогите, если у кого-то есть решение этой проблемы! Заранее спасибо.
ОБНОВЛЕНИЕ:
Пожалуйста, взгляните на мой код...
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;
}