Edited at

よく使うデリゲートのテンプレート

よく必要になり、かつ覚えるのが面倒なデリゲート。

テンプレートとしてメモっておく。


UIScrollViewDelegate

// MARK: - UIScrollViewDelegate.

extension ViewController: UIScrollViewDelegate {

// スクロール中に呼び出され続けるデリゲートメソッド.
func scrollViewDidScroll(_ scrollView: UIScrollView) {
print(#function)
}

// ズーム中に呼び出され続けるデリゲートメソッド.
func scrollViewDidZoom(_ scrollView: UIScrollView) {
print(#function)
}

// ユーザが指でドラッグを開始した場合に呼び出されるデリゲートメソッド.
func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
print(#function)
}

// ユーザがドラッグ後、指を離した際に呼び出されるデリゲートメソッド.
// velocity = points / second.
// targetContentOffsetは、停止が予想されるポイント?
// pagingEnabledがYESの場合には、呼び出されません.
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
print(#function)
}

// ユーザがドラッグ後、指を離した際に呼び出されるデリゲートメソッド.
// decelerateがYESであれば、慣性移動を行っている.
//
// 指をぴたっと止めると、decelerateはNOになり、
// その場合は「scrollViewWillBeginDecelerating:」「scrollViewDidEndDecelerating:」が呼ばれない?
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
print(#function)
}

// ユーザがドラッグ後、スクロールが減速する瞬間に呼び出されるデリゲートメソッド.
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print(#function)
}

// ユーザがドラッグ後、慣性移動も含め、スクロールが停止した際に呼び出されるデリゲートメソッド.
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
print(#function)
}

// スクロールのアニメーションが終了した際に呼び出されるデリゲートメソッド.
// アニメーションプロパティがNOの場合には呼び出されない.
// 【setContentOffset】/【scrollRectVisible:animated:】
func scrollViewDidEndScrollingAnimation(_ scrollView: UIScrollView) {
print(#function)
}

// ズーム中に呼び出されるデリゲートメソッド.
// ズームの値に対応したUIViewを返却する.
// nilを返却すると、何も起きない.
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
print(#function)
return nil
}

// ズーム開始時に呼び出されるデリゲートメソッド.
func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
print(#function)
}

// ズーム完了時(バウンドアニメーション完了時)に呼び出されるデリゲートメソッド.
func scrollViewDidEndZooming(_ scrollView: UIScrollView, with view: UIView?, atScale scale: CGFloat) {
print(#function)
}

// 先頭にスクロールする際に呼び出されるデリゲートメソッド.
// NOなら反応しない.
func scrollViewShouldScrollToTop(_ scrollView: UIScrollView) -> Bool {
print(#function)
return true
}

// 先頭へのスクロールが完了した際に呼び出されるデリゲートメソッド.
// すでに先頭にいる場合には呼び出されない.
func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
print(#function)
}

// スクロールビューのinsetsの値が変わった際に呼び出されるデリゲートメソッド.
func scrollViewDidChangeAdjustedContentInset(_ scrollView: UIScrollView) {
print(#function)
}
}


UISearchBarDelegate

// MARK: - UISearchBarDelegate.

extension ViewController: UISearchBarDelegate {

// フォーカスが当たる際に呼び出されるメソッド(編集の可否を定義可能).
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
print(#function)
return true
}

// フォーカスがあたった際に呼び出されるメソッド.
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
print(#function)
searchBar.setShowsCancelButton(true, animated: true)
}

// フォーカスが外れる際に呼び出されるメソッド(編集終了の可否を定義可能).
func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
print(#function)
return true
}

// フォーカスが外れた際に呼び出されるメソッド.
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
print(#function)
}

// called when text changes (including clear)
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
print(#function)
}

// 入力に変更があった際に呼び出されるメソッド.
func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
print(#function)
return true
}

// 検索キータップ時に呼び出されるメソッド.
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
print(#function)
searchBar.resignFirstResponder()
searchBar.setShowsCancelButton(false, animated: true)
}

// called when bookmark button pressed.
func searchBarBookmarkButtonClicked(_ searchBar: UISearchBar) {
print(#function)
}

// キャンセルボタンタップ時に呼び出されるメソッド.
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
print(#function)
searchBar.resignFirstResponder()
searchBar.setShowsCancelButton(false, animated: true)
}

// called when search results button pressed
func searchBarResultsListButtonClicked(_ searchBar: UISearchBar) {
print(#function)
}

func searchBar(_ searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) {
print(#function)
}
}


UITextFieldDelegate

// MARK: - UITextFieldDelegate.

extension ViewController: UITextFieldDelegate {

// フォーカスが当たる際に呼び出されるメソッド(編集の可否を定義可能).
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
print(#function)
return true
}

// フォーカスがあたった際に呼び出されるメソッド.
func textFieldDidBeginEditing(_ textField: UITextField) {
print(#function)
}

// フォーカスが外れる際に呼び出されるメソッド(編集終了の可否を定義可能).
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
print(#function)
return true
}

// フォーカスが外れた際に呼び出されるメソッド.
func textFieldDidEndEditing(_ textField: UITextField) {
print(#function)
}

// 入力に変更があった際に呼び出されるメソッド.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
print(#function)
return true
}

// クリアボタンが押された際に呼び出されるメソッド.
func textFieldShouldClear(_ textField: UITextField) -> Bool {
print(#function)
return true
}

// Returnキータップ時に呼び出されるメソッド(Returnキータップの可否を定義可能).
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
print(#function)
textField.resignFirstResponder()
return true
}
}