NativeScript 1.7 中的 UIActionSheet

UIActionSheet in NativeScript 1.7

我使用的是 NS 1.7,我正在尝试调用 UIActionSheet。 NS API 已经有了类似于 UIActionSheet 的 dialogs.action() ,除了它没有破坏性按钮。所以我想尝试使用原生的 ActionSheet 并且我成功了:

export function editTap(args: GestureEventData) {
   var obj = <any>args.object;
   var actionSheet = new UIActionSheet();
   actionSheet.addButtonWithTitle("Edit");
   actionSheet.addButtonWithTitle("Delete");
   actionSheet.addButtonWithTitle("Cancel");
   actionSheet.cancelButtonIndex = actionSheet.numberOfButtons - 1;
   actionSheet.destructiveButtonIndex = actionSheet.numberOfButtons - 2;
   actionSheet.showFromRectInViewAnimated(obj.page._nativeView.frame, obj.ios, true);
}

但是,我不知道如何实现响应用户点击内容的回调(我猜是 UIActionSheetDelegate)。 iOS API 中有一个名为 actionSheet:clickedButtonAtIndex 的函数,但我不知道如何通过 javascript (或打字稿)调用它。任何形式的帮助表示赞赏。

非常非常感谢。

可以找到 Objective-C 到 JavaScript 的 NativeScript 编组(数据转换)示例代码 at this link

基本上,实现委托所需的是这样的:

var UIActionSheetDelegate = UIActionSheet.extend({
    clickedButtonAtIndex(buttonAtIndex) {
        // clickedButtonAtIndex code implementation here
    }
}, {
    protocols: [UIActionSheetDelegate]
});

我找到了另一种实现方法,并通过使用 UIAlertController 取得了成功,因为自 iOS 8.3 以来,UIActionSheet 已被弃用。这就是我所做的:

    var alertController = UIAlertController.alertControllerWithTitleMessagePreferredStyle("title", "message", UIAlertControllerStyle.UIAlertControllerStyleActionSheet);
    var editAction = UIAlertAction.actionWithTitleStyleHandler("Edit", UIAlertActionStyle.UIAlertActionStyleDefault, (arg: UIAlertAction) => {
        //code implementation here
    });
    var deleteAction = UIAlertAction.actionWithTitleStyleHandler("Delete", UIAlertActionStyle.UIAlertActionStyleDestructive, (arg: UIAlertAction) => {
        //code implementation here
    });
    var cancelAction = UIAlertAction.actionWithTitleStyleHandler("Cancel", UIAlertActionStyle.UIAlertActionStyleCancel, (arg: UIAlertAction) => {
        //code implementation here
    });

    alertController.addAction(editAction);
    alertController.addAction(deleteAction);
    alertController.addAction(cancelAction);
    var currentPage = topmost().currentPage;
    var viewController: UIViewController = currentPage.ios;
    viewController.presentModalViewControllerAnimated(alertController, true);