XCode4でのnib編集時のTarget/Actionの扱い

以前のInterfaceBuilderで使っていたテクニックが使えなくなっていた。

InterfaceBuilderではtarget/actionパラダイムで接続出来るクラスは、以下の4つのメソッドがヘッダに定義されていれば問題なく使えた。

- (id)target;
- (void)setTarget:(id)anObject;
- (SEL)action;
- (void)setAction:(SEL)aSelector;

上記の4つのメソッドの有無で、IBActionConnectionでコネクションを張れるかどうかを判断していたらしい。

XCode4でこのテクニックは使えない。代わりに以下のような手法を使う。

  1. actionセレクタを文字列で設定するメソッドを追加する

    - (void)setActionName:(NSString*)inActionName
    {
        self.action = NSSelectorFromString(inActionName);
    }
    
    - (NSString*)actionName
    {
        return NSStringFromSelector(_action);
    }
    
  2. ヘッダにtargetをIBOutletを付ける

    @property (retain) IBOutlet id target;
    

XCode4上のUIエディターで通常のconnectionとして接続する事でtargetの設定が出来きる。

  1. XCode4上でセレクタ名を設定する

"Identify Inspector"の"User Defined Runtime Attributes"に

key Path

actionName

Type

String

Value

<selectorNameString>

と設定する。これで、nibの読込み完了時にactionが設定される。

参考文献

http://www.cocoabuilder.com/archive/cocoa/311698-making-target-action-of-view-visible-to-ib.html

Comments

comments powered by Disqus