Accéder au contenu principal

Articles

Affichage des articles du juillet, 2020

UITouches dans un formulaire

Les UIViewController utilisés comme FormSheet modal peuvent être fermé d'un simple glissement du doigt vers le haut. Cette fonctionnalité apparût dans IOS 11 pose problème si vous gérez les déplacement des doigts à l'intérieur du formulaire (je m'en sert par exemple pour mettre une signature). La solution la plus évidente est d'éviter les FormSheet si vous utilisez les déplacements au doigt. L'autre solution est de désactiver la fonctionnalité en désactivant la reconnaissance de mouvement: -( void ) viewDidAppear :( BOOL )animated {     [ super viewDidAppear :animated];      if  ( @available (iOS  11.0 , *)) {        for ( UIGestureRecognizer *gr in self . presentationController . presentedView . gestureRecognizers ) {              if ([gr. name isEqualToString : @"_UISheetInteractionBackgroundDismissRecognizer" ]) {                 // disable la possibilité de quitter la feuille FormSheet ou PageSheet avec un glissement vers le haut            

editActionsForRowAtIndexPath et trailingSwipeActionsConfigurationForRowAtIndexPath

Lorsque l'on passe une application de l'iPad au Mac avec Catalyst, certaines fonctions se retrouvent deprecated. C'est le cas de  editActionsForRowAtIndexPath  qui permet de rajouter des bouton sous la ligne d'une table. La solution préconisée par Apple est d'utiliser  trailingSwipeActionsConfigurationForRowAtIndexPath  mais cette fonction est apparue avec IOS11 et mes applications fonctionne à partie de IOS9. On doit donc mettre les deux fonctions avec des #if TARGET_OS_.... Voici un exemple de fonction qui fonctionne de IOS9 à IOS13 : #if !TARGET_OS_MACCATALYST - (NSArray<UITableViewRowAction *> *) tableView :(UITableView *)tableView                   editActionsForRowAtIndexPath :(NSIndexPath *)indexPath {     UITableViewRowAction *action_reuse =     [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault                                        title: @"Utiliser"                                      handler:^(UITableViewRo

imagePickerController avec Mac Catalyst

Lorsque l'on utilise UIImagePickerController sous IOS, la fonction didFinishPickingMediaWithInfo renvoie l'image originale venant de la caméra ou de la photothèque à travers la variable imageInfo qui est un dictionnaire.      UIImage  *img = imageInfo[ @"UIImagePickerControllerOriginalImage" ]; Cela fonctionne très bien sous IOS, mais avec Mac Catalyst, lorsque l'on récupère une image de la photothèque, celle-ci n'est plus transmise, il n'y a que l'URL qui l'est :      NSURL  *url = imageInfo[ @"UIImagePickerControllerReferenceURL" ]; Mais je n'ai pas trouvé de fonction simple pour récupérer l'image à partir de l'URL. J'ai donc utilisé PHAsset::fetchAssetsWithLocalIdentifiers: mais cette fonction prend en paramètre l'UUID de l'image or cet UUID est en paramètre dans l'URL. Par exemple, voici une URL que peut contenir imageInfo : assets-library://asset/asset.jpeg?id=6D3B81E3-7332-46D7-AAB8-023F28AC4ADD&ext=j