AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung iOS iOS: Implementierung des Codeblocks für ein completionHandler

iOS: Implementierung des Codeblocks für ein completionHandler

Ein Thema von uups · begonnen am 30. Dez 2017 · letzter Beitrag vom 16. Jan 2018
 
uups

Registriert seit: 23. Aug 2004
68 Beiträge
 
#1

iOS: Implementierung des Codeblocks für ein completionHandler

  Alt 30. Dez 2017, 12:32
Hallo!

Ich versuche seit Stunden vergeblich eine Delphi-Methode zu imlementieren, die anstelle eines Objective-C Codeblocks eingesetzt werden soll. Ich habe bereits mehrere Codeblocks erfolgreich durch die Klassenmethoden ersetz, was aktuell auch die einzige Möglichkeit sein soll. Das Problem bei diesem Codeblock ist, dass der er einen weiteren Codeblock als Übergabeparameter hat. Schlimmer noch: wenn man sich den Beispielcode im Xcode anschaut, wird dieser Codeblock-Parameter niemals ausgeführt sondern getrosst eine Boolean-Variable sein könnte, mit der man der API den Erfolg oder Misserfolg der Codeblock-Aktion mitteilt.

Ganz konkret geht es bei der ganzen Angelegenheit um den Versuch, die UITableView durch s.g. Swipe-Actions zu ergänzen, die seit iOS 11 verfügbar sind. Die Swipe-Actions geben dem Entwickler die Möglichkeit, einer UITableViewCell neben "Löschen" andere Bearbeitungsaktionen hinzuzufügen. Diese werden dann angzeigt, wenn man eine UITableViewCell nach recht oder links "wischt". Wir alle kennen das von diversen Apps wie Mail- oder Messaging-Clients. Hier ein kurzen Video (zwar ein Swift-Beispiel, aber im Prinzip dasselbe) wie das ganze aussueht: https://www.youtube.com/watch?v=wUVfE8cY2Hw .

Hier die Apple-Dokumentation der neuen Methoden:
https://developer.apple.com/document...?language=objc
https://developer.apple.com/document...?language=objc

Und hier ist die Definitions des o.g. Codeblocks:
https://developer.apple.com/document...?language=objc


Ich muss sagen, es hat bei mir eigentlich ganz gut geklappt das Ganze umzusetzen - bis auf diesen Codeblock-Parameter. Ich weis einfach nicht wohin damin. Und dieser ist offenbar sehr wichtig, denn: die UITableViewCell wird visuell nicht in den ursprünglichen Zustand (vor dem Wischen) versetzt, wenn man den Codeblock-Parameter weglässt. Beispielsweise beim Löschen ist es sehr wichtig, dass die Löschen-Animation der UITableViewCell angezeigt wird, wodurch dem Benutzer signalisiert wird, dass der Eintrag gelöscht wurde. Kurz gesagt: erst mit Übergabe dieses Codeblock-Parameters wird die Aktion sauber ausgeführt und visuell korrekt dargetellt.

So habe ich es umgesetzt:

Delphi-Quellcode:
{UIContextualAction}
const
  UIContextualActionStyleNormal = 0;
  UIContextualActionStyleDestructive = 1;

type
  UIContextualActionStyle = integer;
  UIContextualAction = interface;

  UIContextualActionHandler = procedure(action: UIContextualAction; sourceView: UIView; completionHandler: UIContextualCompletionHandler) of object; <-----------------

  UIContextualActionClass = interface(NSObjectClass)
    ['{F341A178-2950-4D0A-9EF2-DCDEAB76FF81}']
    function contextualActionWithStyle(style: UIContextualActionStyle; title: NSString; handler: UIContextualActionHandler): Pointer; cdecl;
  end;

  UIContextualAction = interface(NSObject)
    ['{C5B4CB53-0655-41FA-B48E-D4FB0E9A54FB}']
    function title: NSString; cdecl;
    function backgroundColor: UIColor; cdecl;
    function image: UIImage; cdecl;
    procedure setTitle(title: NSString); cdecl;
    procedure setBackgroundColor(backgroundColor: UIColor); cdecl;
    procedure setImage(image: UIImage); cdecl;
  end;
  TUIContextualAction = class(TOCGenericImport<UIContextualActionClass, UIContextualAction>);
Es fehlt mir nun die richtige Definition des UIContextualCompletionHandler, der als Codeblock-Parameter dienen soll.
Und ich habe keine Ahnung, wie ich diesen definiere.
Danke!
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz