Iは、一つの画面に提示された場合、右から左への標準的な「ショー」セグエが提示さUITableViewController
あり、別の画面(UIViewController
)から提示されたとき、底部からモーダル提示されます。私は数ヶ月前に尋ねたquestion(スクリーンショットあり)の助けを借りてこれを正しく動作させました。なぜこのUITableViewControllerはモーダルを解除しますか?
鍵はUITableViewCell
から作成する代わりに、自分の設定画面のUINavigationController
から共有UITableViewController
にセグを作成していました。しかし、奇妙なことに、右から左に正しく提示されても、それを却下することはモーダルで(上から下に)閉じます。
私が提示テーブルビューコントローラにそれが解雇を処理するので、それが提示だUITableViewController
のデリゲートを作ってるんです。ここでは、実装したプロトコルと拡張子は(スウィフト2.3)です:
protocol DismissalDelegate : class {
func selectionDidFinish(controller: UIViewController)
}
extension DismissalDelegate where Self: UIViewController {
func selectionDidFinish(viewController: UIViewController) {
self.dismissViewControllerAnimated(true, completion: nil)
}
}
そして私は提示コントローラで定義されたセグエでそれを設定します。ユーザーが行ったときに提示テーブルビューコントローラがdelegate?.selectionDidFinish(self)
を呼び出し
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "goToLifts" {
let destination = segue.destinationViewController as! LiftSelectionTableViewController
destination.dismissalDelegate = self
} else {
return
}
}
(didSelectRowAtIndexPath
で)選択::提示テーブルビューコントローラにこのメソッドを呼び出す
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
tableView.deselectRowAtIndexPath(indexPath, animated: true)
guard (dismissalDelegate != nil) else {
return
}
dismissalDelegate?.selectionDidFinish(self)
}
私はビューコントローラを表示するためにAPIsを見てきましたが、これを制御するオプションを公開しているものは見つかりませんでした。 dismiss(animated:completion:)
APIは、モーダルに表示されているビューコントローラを無効にするためのものだとも言っていますが、私は解雇に関連して何もしていません。
は、どのように私はこの事は、それが私のUITableViewController
から提示(右から左へ、そしてバック)が、他のビュー(UIViewController
)から提示されたとき、モーダル動作を保つだとき、それが提示のと同じ方法を解任するために得ることができますか?
彼は正しかったです。 +1 –
@ジェフリー、それはかなり近いです。両方ともtableViewControllerです。私はあなたの両方の提案を試みましたが、その動作は同じです。何が起きているのか分からなかったので、私は自分の質問と例を編集して理解しやすくしました(あなたは正しい、それははっきりとは分かりませんでした)。見てみて、違いがあるかどうか私に知らせてください。 – Jim
私はデリゲートビューコントローラで 'func selectionDidFinish(viewController:)'メソッドを実装する必要がないことに気づきました。プロトコルに準拠すれば、拡張で定義された実装を自動的に持つからです。だから私はあなたの提案をプロトコルの拡張に入れ、それは動作します!それはあなたが私がそれを置くべきだと示唆していた場所ですか? – Jim