いやー、7年iOSやってても全然しらなかったんですが、Segueを自作するとちょっと便利ですね。

モーダルで開いたViewControllerを閉じるときにボタンを置いてコードを書くのは面倒だなーと思ってたんですが、閉じるボタンの操作をSegueで定義できます。

準備としてUIStoryboardSegueを継承したサブクラスをプロジェクト内に作っておきます。

1class DismissControllerSegue: UIStoryboardSegue {
2    override func perform() {
3        self.source.dismiss(animated: true, completion: nil)
4    }
5}

コードはシンプルでperform()の中にやりたいことを書く形。今回は自分自身をdismissするだけです。

ここまででstoryboardが参照してくれるようになっていますので、あとはボタンと紐付けるだけです。controlキーを押したままボタンからViewController自身にドラッグすると↓のようなpopoverみたいなのが出ます。

ここで、先程追加したSegueを表すdismiss controllerを選べばOK。ボタンタップ時に自身が閉じてくれます。