LoginSignup
96
89

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-07-04

よく必要になり、かつ覚えるのが面倒なデリゲート。
テンプレートとしてメモっておく。

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
    }
}
96
89
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
96
89