8

Ich habe benutzerdefinierte TimePicker mit UIPickerView, 3 UIPickerView erstellt.UIPickerView UI und Funktionsproblem in iPhone 6s plus Gerät

  • man stundenlang
  • One für Minuten
  • One für AM/PM

von Zeit Kommissionierung, ich benutze diese Zeit lokale Benachrichtigung einzustellen. Weil meine Anwendung auf Alarmfunktion basiert.

UI Teil und Funktionelle Teil funktioniert gut in iPhone 5,5s, 6,6 Plus, aber Problem in iPhone 6s plus Gerät. Nicht bekommen, was schief läuft! Derselbe Code funktioniert auch in allen anderen Geräten außer iPhone 6s plus.

Unten Screenshot ist von iPhone 6,

enter image description here

Wie Sie sehen können, ScreenShot Zeit und picker Zeit gleich ist. Es ist ein funktionaler Teil. Ich habe Code geschrieben wie, fange die aktuelle Zeit und entsprechend habe ich den ausgewählten Index der PickerView gesetzt. Funktioniert perfekt! Außerdem habe ich ausgewählte Indexschriften größer eingestellt. Das sieht auch im iPhone 6 Gerät perfekt aus.

Unten Screenshot ist von iPhone 6s Plus

enter image description here

Wie Sie sehen können, ScreenShot Zeit und PickerView Zeit nicht gleich ist. So funktionierende Teil funktioniert nicht in iPhone 6s plus Gerät. Auch im UI-Teil werden Schriftarten für die ausgewählte Zeile in der zweiten PickerView größer, aber nicht in der ersten.

Auch, wenn ich die lokale Benachrichtigung durch Auswahl Zeit von Zeit Picker einstellen. Es funktioniert auch gut (Benachrichtigung wird Feuer auf die perfekte Zeit) in allen anderen Geräten außer iPhone 6s Plus. Und in iPhone 6s Plus, egal wann ich aus UIPickerView auswähle, erhält Benachrichtigung sofort Feuer.

Ich weiß nicht, was mit dem iPhone 6s plus Gerät schief geht. Jedes Problem ist mit PickerView oder etwas anderes. Aber warum funktioniert der gleiche Code gut für alle anderen Geräte und nicht nur für das iPhone 6s plus Gerät.

Jede Hilfe wird geschätzt! In dieser Ausgabe fest stecken. Bitte helfen Sie, wenn jemand eine Lösung für dieses Problem hat! Danke im Voraus.

UPDATE:

Sie bitte einen Blick in meinem Code haben ...

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

Scheint, dass etwas mit dem automatischen Layout nicht stimmt, wenn Sie das verwenden. Gibt es eine Einschränkung fehlt oder extra? Sie können die Hintergrundfarbe für das Textfeld festlegen, um zu sehen, ob die Schrift kleiner ist, oder die gesamte Ansicht. –

+0

Nein, ich verwende kein Auto-Layout. Ich hatte es mit der automatischen Größenanpassung geschafft. Und es gibt nicht nur UI-Probleme. Auch im iPhone 6s Plus wird es funktionelle Probleme geben. – Gati

+0

iPhone 6s plus ist Gerät oder Simulator? Und was läuft los? Und andere Geräte oder Simulatoren, die gut funktionieren, laufen mit ios? – Lion

Antwort

3

Diese Antwort ist für zukünftige Leser, vielleicht wird es jemandem irgendwie helfen.

Nach viel R & D und Debuggen des Codes, endlich gelöst mein Problem.

-Code, die ich in meinem aktuellen hinzugefügt (Code von oben Frage prüfen) Code wie unten ist,

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

Vor über Codezeilen hinzugefügt (diese Zeilen hinzugefügt, wo immer ich NSDateFormatter verwendet habe) es funktioniert gut in allen anderen Geräten außer iPhone 6s plus. Aber durch die Einstellung NSLocale und TimeZone bis NSDateFormatter funktioniert es einwandfrei in ALL Geräte.

Danke!

Verwandte Themen