2012-04-04 4 views
0

UIViewのプロパティにtagのような使用方法はありますか?物事は私がUITextFieldNSIntegerを渡したいと思います。道はtagです。しかし、私は2つの異なるNSIntegerを渡したいと思います。UIViewのタグに似ている/似ている

アイデア?

答えて

3

UITextFieldをサブクラス化し、2つのNSIntegerプロパティをクラスに追加できます。

@interface CustomTextField : UITextField 

@property (nonatomic, assign) NSInteger x; 
@property (nonatomic, assign) NSInteger y; 

@end 
+0

+1私は同じことをしようとしていました。 :) – lnafziger

2

Associative Referenceを使用して任意のオブジェクトに任意のデータを添付できます。これは非常に便利な方法です。メモリ管理を正しく処理します。私は時にはこれらをラップするカテゴリを使用するので、既存のクラスに新しいプロパティを作成できます。たとえば、あるプロジェクトでは、すべてのView Controllerが特殊ラベルについて知ってほしいと思っています(彼らはすべてnavigationControllerを知っているようです)。 PTLのサンプルコードChapter 3用:あなたはUIAlertView iOS5をで使用して簡単な作業の例を見つけることができます

@interface UIViewController (MYSpecialViewController) 
@property (nonatomic, readwrite, strong) UILabel *specialLabel; 
@end 

@implementation UIViewController (MYSpecialViewController) 
static const char kMySpecialLabelKey; 

- (UILabel *)specialLabel 
{ 
    return objc_getAssociatedObject(self, &kMySpecialLabelKey); 
} 

- (void)setSpecialabel:(UILabel *)value 
{ 
    objc_setAssociatedObject(self, &kMySpecialLabelKey, value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 
@end 

:私は、このようにそれを行います。

+0

私はいくつかの小さな編集をした、私はあなたが気にしないことを願っています。以前は静的ポインタ値を使用していましたが、これは0になります。これは意味のあるアドレスを持つ静的charへのポインタです。 –

+0

@SedateAlienありがとうございます。あなたは完全に正しいです。これは私が参照していたコードのバグでした(私は今、私の製品コードを修正しました)。参照されるサンプルコードは、正しくそれを行います。あなたが注意するように、これはcharではなくchar *でなければなりません。 –

+0

この-vs-サブクラス化を行う利点は何ですか? – lnafziger

1

は、一般的な、オブジェクト指向のソリューションを取るが、あなたは、タグへのデータのものをたくさんすることができます覚えている:

- (uint32_t)pack:(uint16_t)a with:(uint16_t)b { 

    return (uint32_t)(a << 16 | b); 
} 

- (uint16_t)getA:(uint32_t)pair { 
    return (uint16_t)((pair & 0xffff0000) >> 16); 
} 

- (uint16_t)getB:(uint32_t)pair { 
    return (uint16_t)(pair & 0xffff); 
} 

// use it 

- (void)setupSomeView { 

    someView.tag = [self pack:1024 with:2048]; 
} 

- (IBAction)someControlEventHappened:(id)sender { 

    NSLog(@"%d %d", [self getA:sender.tag], [self getB:sender.tag]); 
} 

警告:RobNapierの答え@

  1. は、より正確な、より一般的です。唯一 利点この方法は、それが32K
  2. 作品NSInteger実装どこにでもある> = 32ビット、私は思う<符号なしintのペアのための迅速かつ汚い
  3. 作品だということです。
関連する問題