gpt4 book ai didi

ios - 德尔福 + iOS : Error by "translating" of "UIContextualAction" interface from ObjectiveC to Delphi

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:26 25 4
gpt4 key购买 nike

我正在尝试通过实现 iOS 11 中可用的两个 UITableView 委托(delegate)方法,在 Delphi 中为 UITableView 添加交换操作:

leadingSwipeActionsConfigurationForRowAtIndexPathtrailingSwipeActionsConfigurationForRowAtIndexPath

objective-c :

- (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);

Action 派生自新类 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 创建我的 Action 作为 UIContextualActionHandler。如果我想创建一个“空”操作,应用程序会崩溃:

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

我做错了什么?谢谢!

最佳答案

解决方法:

@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;

关于ios - 德尔福 + iOS : Error by "translating" of "UIContextualAction" interface from ObjectiveC to Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47984525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com