0
これはUIViewController
です。これは.popover
と表示されています。ポップオーバーコントローラが破棄されない
func editSlotPopOver(eventCell:EventCell, gr:UITapGestureRecognizer){
let location = gr.location(in: eventCell)
let editAlertController = UIViewController()
let viewAlert = EditSlotPopOver(frame: CGRect(x: 0, y: 0, width:editAlertController.view.bounds.width , height: editAlertController.view.bounds.height))
viewAlert.delegate = self
viewAlert.setEvent(event: eventCell.event!, cell: eventCell)
editAlertController.view = viewAlert
editAlertController.modalPresentationStyle = .popover
let popoverMenuViewController:UIPopoverPresentationController = editAlertController.popoverPresentationController!
popoverMenuViewController.permittedArrowDirections = .any
editAlertController.popoverPresentationController?.delegate = self
popoverMenuViewController.sourceView = eventCell
popoverMenuViewController.sourceRect = CGRect(
x: location.x,
y: location.y,
width: 1,
height: 1)
present(editAlertController, animated: true, completion: nil)
}
予想通りポップオーバーが提示されています
しかし、私はこの方法でセルを削除しようとすると:
func deleteSlot(eventCell: EventCell, id: Int){
let application = UIApplication.shared.delegate as! AppDelegate
let id:Int32 = Int32(eventCell.eventId!)
print(id)
let context = application.managedObjectContext
let fetchRequest:NSFetchRequest<Slot> = NSFetchRequest(entityName: "Slot")
fetchRequest.predicate = NSPredicate(format: "event_id = %d", id)
do {
let result = try context.fetch(fetchRequest)
let slot = result[0]
application.managedObjectContext.delete(slot)
do{
try context.save()
}catch let err {
print(err)
}
}catch let error {
print(error)
}
//DISMISS DOESN'T WORK HERE
self.editAlertController?.dismiss(animated: true, completion: nil)
eventCell.removeFromSuperview()
self.calendarView.forceReload(reloadEvent: true)
}
細胞はスーパービューから削除されますオブジェクトがコアデータから削除されましたが、私はポップオーバーを却下することができません:
2つの機能しかしEditSlorPopOver
はEditSlotDelegate
命名プロトコルのUIViewのサブクラスは、同じコントローラで宣言されています。デリゲートが呼び出されていますが、ポップオーバーは破棄されていません。
がself
はなくself.editAlertController
に却下呼び出してみますコメントから移動
protocol EditSlotDelegate {
func deleteSlot(eventCell: EventCell, id: Int)
}
class EditSlotPopOver: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
setUpEditButton()
editButton.addTarget(self, action: #selector(deleteSlot), for: .touchUpInside)
}
//.....more code here
func deleteSlot(){
delegate?.deleteSlot(eventCell: eventCell!, id: Int(slotid!))
}
//.....more code here
}
@Rajat最新の質問 – mat
「self.editAlertController」ではなく「self」でdismissを呼び出してみてください。ポップオーバーがそれを却下するのではなく、それを却下すべきポップオーバーを提示するコントローラーでなければなりません。 – dlbuckley
@dlbuckleyああ私の神!私はそれがとても簡単なものだとは信じられません。それは問題を解決しました。私はそれを受け入れることができるように答えることができますか?どうもありがとう ! – mat