2017-12-26 20 views
2

私はiOSの11から入手imlement 2つのUITableViewのデリゲートメソッドで、DelphiでのUITableViewのためのスワップ・アクションを追加しようとしているのObjectiveCから "UIContextualAction" インターフェースの "翻訳" することによってエラー:デルファイ+のiOS:デルファイ

leadingSwipeActionsConfigurationForRowAtIndexPath trailingSwipeActionsConfigurationForRowAtIndexPath

ObjectiveC:

- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos); 
- (nullable UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos); 

アクションは、新しいクラスUIContextualActionから派生します。私の問題は、このクラスの翻訳にあります。ここでObjectiveCクラスの定義は次のとおりです。

したがって
@class UIContextualAction; 

// call the completionHandler to reset the context to its normal state (e.g. when swiping, resets to unswiped state) 
// pass YES to the completionHandler if the action was actually performed, to show a visual indication of the successful completion 

typedef void (^UIContextualActionHandler)(UIContextualAction *action, __kindof UIView *sourceView, void(^completionHandler)(BOOL actionPerformed)); 

typedef NS_ENUM(NSInteger, UIContextualActionStyle) { 
    UIContextualActionStyleNormal, 
    UIContextualActionStyleDestructive 
} NS_SWIFT_NAME(UIContextualAction.Style) API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos); 

UIKIT_EXTERN API_AVAILABLE(ios(11.0)) API_UNAVAILABLE(tvos) 
@interface UIContextualAction : NSObject 

+ (instancetype)contextualActionWithStyle:(UIContextualActionStyle)style title:(nullable NSString *)title handler:(UIContextualActionHandler)handler; 

@property (nonatomic, readonly) UIContextualActionStyle style; 
@property (nonatomic, copy, readonly) UIContextualActionHandler handler; 

@property (nonatomic, copy, nullable) NSString *title; 
@property (nonatomic, copy, nullable) UIColor *backgroundColor; // a default background color is set from the action style 
@property (nonatomic, copy, nullable) UIImage *image; 

@end 

、私のDelphiのインポートは、次のようになります。

const 
    UIContextualActionStyleNormal = 0; 
    UIContextualActionStyleDestructive = 1; 

type 
    UIContextualActionStyle = integer; 

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

    UIContextualAction = interface(NSObject) 
    ['{C5B4CB53-0655-41FA-B48E-D4FB0E9A54FB}'] 
    function title: NSString; cdecl; 
    function backgroundColor: UIColor; cdecl; 
    function image: UIImage; cdecl; 
    function style: UIContextualActionStyle; 
    function handler: Pointer{UIContextualActionHandler}; 
    procedure setTitle(title: NSString); cdecl; 
    procedure setBackgroundColor(backgroundColor: UIColor); cdecl; 
    procedure setImage(image: UIImage); cdecl; 
    procedure setStyle(style: UIContextualActionStyle); cdecl; 
    procedure setHandler(handler: Pointer{UIContextualActionHandler}); cdecl; 
    end; 
    TUIContextualAction = class(TOCGenericImport<UIContextualActionClass, UIContextualAction>); 

私もUIContextualActionHandlerの実装に来て、nilのと私のアクションを作成していませんUIContextualActionHandlerとして現時点では

var 
    btnDelete: UIContextualAction; 
begin 
    //Crash by this code line: 
    btnDelete := TUIContextualAction.Wrap(TUIContextualAction.OCClass.contextualActionWithStyle(UIContextualActionStyleNormal, StrToNSStr('Delete'), nil)); 

私は間違って何をしていますか? ありがとう!

+0

ドキュメントでは、nilを渡すことはできません(とにかく許可する場合を除いて)。あなたはハンドラを提供しようとしましたか? –

+0

@DaveNottageいいえ、Xcodeテストアプリはハンドラとしてnilに問題はありません。私は今、ハンドラを作成しようとしています。ハンドラは、パラメータとして別の匿名メソッドをまだ持っている匿名メソッドのようです。私はどのように私はそれをデルファイで得ることができるか考えていますか? –

答えて

0

ソリューション:

@property (nonatomic, readonly) UIContextualActionStyle style; 
@property (nonatomic, copy, readonly) UIContextualActionHandler handler; 

は読み取り専用であり、宣言する必要はありません。正しい定義:

UIContextualActionClass = interface(NSObjectClass) 
    ['{F341A178-2950-4D0A-9EF2-DCDEAB76FF81}'] 
    function contextualActionWithStyle(style: UIContextualActionStyle; title: NSString; handler: Pointer{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;