よく必要になり、かつ覚えるのが面倒なデリゲート。
テンプレートとしてメモっておく。
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
}
}