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);
我使用的是 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);