2016-06-07 27 views
8

Ho creato un TimePicker personalizzato utilizzando UIPickerView, preso 3 UIPickerView.UI UickerView e problema funzionale nel dispositivo iPhone 6s plus

  • Uno per ore
  • One for Minuti
  • One per AM/PM

da tempo raccogliendo, sto usando questo tempo per impostare la notifica locale. Perché la mia applicazione si basa sulla funzionalità di allarme.

La parte UI e la parte funzionale funzionano bene con iPhone 5,5s, 6,6 Plus ma con problemi di iPhone 6s plus. Non capisco cosa non va! Lo stesso codice funziona bene su tutti gli altri dispositivi tranne iPhone 6s plus.

Di seguito screenshot è di iPhone 6,

enter image description here

Come si può vedere, il tempo e il tempo ScreenShot pickerView è lo stesso. È parte funzionale. Ho scritto codice come, prendi l'ora corrente e in quanto ho impostato l'indice selezionato di PickerView. Funziona perfettamente! Inoltre ho impostato i caratteri di indice selezionati più grandi. Che è anche perfetto nel dispositivo iPhone 6.

Di seguito screenshot è di iPhone 6s Inoltre,

enter image description here

Come si può vedere, il tempo ScreenShot e PickerView Il tempo non è lo stesso. Quindi la parte funzionale non funziona nel dispositivo iPhone 6s plus. Anche nella parte dell'interfaccia utente, i caratteri diventano più grandi per la riga selezionata nel secondo PickerView ma non nel primo.

Anche quando si imposta la notifica locale selezionando l'ora dalla selezione orari. Funziona egregiamente (la notifica si attiva in perfetto orario) in tutti gli altri dispositivi tranne iPhone 6s plus. E in iPhone 6s e in qualsiasi momento selezioni da UIPickerView, la notifica si attiva immediatamente.

Non so cosa non funzioni con il dispositivo iPhone 6s plus. Entrambi i problemi riguardano PickerView o qualcos'altro. Ma perché lo stesso codice funziona bene per tutti gli altri dispositivi e non solo per il dispositivo iPhone 6s plus.

Qualsiasi aiuto è apprezzato! Difficilmente bloccato in questo numero. Si prega di aiutare se qualcuno ha qualche soluzione per questo problema! Grazie in anticipo.

UPDATE:

Si prega di dare un'occhiata al mio codice ...

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; 
} 
+0

Sembra che ci sia qualcosa di sbagliato nell'autolayout, se lo si sta usando. C'è un vincolo mancante o extra? È possibile impostare il colore di sfondo per il campo di testo per vedere se il carattere è più piccolo o l'intera vista. –

+0

No, non sto usando l'autolayout. L'ho gestito usando il ridimensionamento automatico. E non c'è solo il problema dell'interfaccia utente. Affrontare problemi funzionali anche in iPhone 6s plus. – Gati

+0

iPhone 6s plus è un dispositivo o un simulatore? E in esecuzione quale ios? E altri dispositivi o simulatore che funzionano bene sono in esecuzione su iOS? – Lion

risposta

3

Questa risposta è per i futuri lettori, potrebbe essere che aiuterà qualcuno in qualche modo.

Dopo aver eseguito molto R & D e il debug del codice, finalmente risolto il problema.

codice che ho aggiunto nella mia attuale (verificare il codice di domanda di cui sopra) il codice è come sotto,

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

Prima di aggiungere sopra le righe di codice (aggiunto queste righe dove mai ho usato NSDateFormatter) stava funzionando bene in tutti gli altri dispositivi tranne iPhone 6s plus. Ma impostando NSLocale e TimeZone a NSDateFormatter funziona perfettamente perfettamente nei dispositivi ALL.

Grazie!