我想在iPhone和iPad设备上都显示ActionSheet
。虽然我的代码在iPhone上运行正常,但它并不适用于iPad。原因是我需要指定显示弹出窗口的位置。因此,我尝试使用this answer中提出的代码。我目前遇到的问题是,我不知道如何将参数sender
传递给方法。
例如,我有一个UITableViewRowAction
点击后会显示ActionSheet
:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? {
let rowAction = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "Action", handler:{action, indexpath in
print("Action for element #\(indexPath.row).");
self.displayActionSheet()
});
return [rowAction];
}
在我的案例中,哪个参数是sender
?我无法将rowAction
传递给displayActionSheet()
,因为该变量在其自己的初始值中使用。我也尝试传递self.displayDeleteLicencePlateActionSheet(self.items[indexPath.row])
,但结果相同 - 我总是在else
表达式的guard
子句中结束:
guard let button = sender as? UIView else {
print("sender empty")
return
}
我想在点击ActionSheet
时显示UIBarButtonItem
:
let myButton = UIBarButtonItem(title: "FooBar", style: .Plain, target: self, action: #selector(SecondViewController.displaySecondActionSheet(_:)))
但同样的结果。怎么办呢?
答案 0 :(得分:0)
请参考以下代码来解决您的问题。
TARGET_OBJECT将是您的发件人,您希望在其中显示警报。
func showAlert() {
let alert = UIAlertController(title: "Title", message: "Message text", preferredStyle: .alert)
let actionOK = UIAlertAction(title: "OK", style: .default) { (alertAction) in
}
alert.addAction(actionOK)
if let popoverController = alert.popoverPresentationController {
popoverController.sourceView = self.TARGET_OBJECT // TARGET_OBJECT will be your sender to show an alert from.
popoverController.sourceRect = CGRect(x: self.TARGET_OBJECT.frame.size.width/2, y: self.TARGET_OBJECT.frame.size.height/2, width: 0, height: 0)
}
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true, completion: nil)
}
Please check attached image it will appear as you want.