UIDatePicker und Mac Catalyst

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UIDatePicker und Mac Catalyst

    Hallo zusammen,

    hat jemand von Euch schon einmal einen UIDatePicker unter Mac Catalyst implementiert? Ich habe eine Zelle in einer UITableView, die ein Datum beinhaltet:
    • Bisher war dies ein UITextField, mit einer AccessoryView, in der ein UIDatePicker (wheeled) gezeigt wurde -> Unter Mac Catalyst gibt es keine eingeblendete AccessoryView.
    • Nun habe ich auf den neuen "compact" Style umgestellt: Toll unter iOS -> Unter Mac Catalyst wird nur der Datumstext - ausserdem falsch ausgerichtet - angezeigt, eine Eingabe ist nicht möglich
    • Schau ich in eine Apple-App unter Mac Catalyst ("Home"), ist dort für die Eingabe einer Zeit in der Automatisierung nur ein Text zum Überschreiben. Scheinbar hat Apple das gleiche Problem und hier nur eine "Minimallösung" implementiert
    Ich plane nun, plattformspezifisch nur für Mac Catalyst eine reine Texteingabe zu realisieren - also ähnlich zu Home. Dämlich finde ich es trotzdem und es bestärkt meine Meinung, dass man eine (komplexere) App noch nicht unter Mac Catalyst ausliefern kann.

    Wer hat für die Datumseingabe unter Mac Catalyst eine bessere Idee?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hast Du - insbesondere im zweiten Fall - etwas spezielles machen müssen? Hast Du den Picker direkt in einer "normalen" View oder auch in einer UITableView? Und läuft das noch mit dem iOS 14 SDK?

    Ich weise ihn der AccessoryView im "compact" Style zu, so dass in der Tabelle der Datumstext angezeigt wird. Bei Touch wird dann modal der Kalender inkl. Zeit angezeigt. Das funkioniert unter iOS genauso wie ich will. Unter Mac Catalyst erscheint der Text aber ganz links in der Zelle, überlappt sich mit dem Label und ist nicht änderbar.

    Doch ein Fehler bei mir?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Okay, das Problem scheint in meinem Projekt zu liegen: Ich habe nun einmal ein neues Project angefangen und der Picker funktioniert ... auch im kompakten Stil. Allerdings fiel mir auf, dass das Popup nur erscheint, wenn man auf eine Datumskomponente klickt. Bei der Uhrzeit wird dieser nur für die Tastaturausgabe aktiviert. Vielleicht liegt - aufgrund der falschen Platzierung - bei mir hier das Problem.

    Ich werde am Wochenende mal weiter forschen. Danke, dass Du mich vom Suchen in der falschen Richtung bewahrt hast!

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Tolibi schrieb:

    Der Picker wird bei mir in einem extra View angezeigt, nicht in einer Tabelle - also kein Accessory View. Ich habe genug Platz, ist also nicht mit deinem Problem vergleichbar.
    Es war aber der Schubs in die richtige Richtung, nochmals danke!

    Das Problem ist gelöst: Der Fehler lag in der Verwendung der AccessoryView einer UITableViewCell: So habe ich "schon immer" einen UISwitch zu einer Zelle hinzugefügt und mir nichts dabei gedacht, dies auch beim UIDatePicker zu machen. iOS-seitig auch wie gesagt alles gut, aber unter Mac Catalyst führt dies zu einer Positionierung am linken oberen Rand der Zelle (überlappend zum Label). Warum ausserdem Klicks ignoriert wurden, habe ich nicht mehr erforscht.

    Wenn man den UIDatePicker sauber der ContentView der Zelle hinzufügt, funktioniert alles unter iOS und Mac Catalyst:

    Quellcode

    1. - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    2. {
    3. if (self = [super initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseIdentifier])
    4. {
    5. self.selectionStyle = UITableViewCellSelectionStyleNone;
    6. self.userInteractionEnabled = YES;
    7. self.datePicker = [UIDatePicker new];
    8. self.datePicker.preferredDatePickerStyle = UIDatePickerStyleCompact;
    9. self.datePicker.datePickerMode = UIDatePickerModeDateAndTime;
    10. self.datePicker.translatesAutoresizingMaskIntoConstraints = NO;
    11. [self.contentView addSubview:self.datePicker];
    12. UILayoutGuide *margins = self.contentView.layoutMarginsGuide;
    13. [[self.datePicker.trailingAnchor constraintEqualToAnchor:margins.trailingAnchor] setActive:YES];
    14. [[self.datePicker.centerYAnchor constraintEqualToAnchor:margins.centerYAnchor] setActive:YES];
    15. }
    16. return self;
    17. }
    Alles anzeigen
    Na also, geht doch :)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.