多段DelegateをResponder Chainで
取り除く方法

Toru Hosokawa
twitter:@anton0825
facebook:toru.hosokawa1
github:hosokawa0825
blog:http://d.hatena.ne.jp/anton0825/

2014.3.12

View・ViewControllerのHierarchy

Delegate

多段Delegate

Responder Chain

Responder Chain

Responder Chainでうまくいかない場合

  • UIPopoverControllerはNSObjectのsubclassであり、UIResponderのsubclassではない。 よってnextResponderにならない。
  • ModalViewはWindow objectのsubviewであり、RootViewControllerから始まるView Hierarchyの下に無い。
  • viewWillAppearの中ではnextResponderがnilになっていることがある。
    その場合、viewWillAppearの中からイベントを発生させられない。

これらのView・Event内で発生したeventはPopoverControllerやModalViewのViewControllerを保持しているViewControllerに伝えたい

Responder Chainを一部変更したい

  • 任意のobjectをnext responderに設定出来る
  • next responderを設定しない場合はdefaultのnext responderが使われる

NSObjectのカテゴリとしてnext responderを変更可能なResponder Chainを実装
NSObject+CustomMethod.m

その他Tips

  • eventのselectorが偶然かぶってしまうのを防ぐために、prefixを付けています。
    Responder Chain Eventの頭文字を取って「rce」をprefixとして使用。