1
私はそちらを見て、目標を達成する方法を見つけるために多くのブログを読んでいます。私が出会った最も分かりやすい投稿はここにあるものでしたPass data back to previous viewcontroller。私の理解が混ざっていると確信していますが、私が達成しようとしているのは、2番目のビューでセルをスワイプしたときに地図からアノテーションを削除することです。Swift 3プロトコルと委任方法?
注釈をCoreDataから削除することは問題ではないので、rightCallOutをクリックしたときにピンを削除することも問題ではありません。この問題は、VC2のアクションからVC1のマップから注釈を削除したいときに発生します。私はこの単純なプロセスを誤解していますが、どのように達成するのですか?
FirstViewController
import UIKit
class ViewController: UIViewController, PinRemoverDelegate {
func removePin() {
mapView.removeAnnotation(selectedAnnotation)
}
}
SecondViewController
import UIKit
protocol PinRemoverDelegate: class {
func removePin()
}
class SecondViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
weak var delegate: PinRemoverDelegate? = nil
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
let place = storedLocations[indexPath.row]
context.delete(place)
(UIApplication.shared.delegate as! AppDelegate).saveContext()
// Attempt To remove The Pin
delegate?.removePin()
}
tableView.reloadData()
}
}
'SecondViewController'には、メッセージを送信するView Controllerインスタンスに設定された' weak var delegate:PinRemoverDelegate? 'プロパティが必要です。通常は、両方のView Controllerを所有しているか認識しているコードで、 'delegate'を割り当てます。 – par
病気を編集する、私はすでに弱い変数を実装している、私はちょうどクイックコピー/短縮コードの貼り付けでそれを失った。 – Chilly
あなたの 'FirstViewController'にデリゲートをselfとして設定することを忘れないでください。 'vc2.delegate = self'のようなものです。 'SecondViewController'をどのように表示するかによって異なります。 – xmhafiz