UIViewのプロパティにtag
のような使用方法はありますか?物事は私がUITextField
NSInteger
を渡したいと思います。道はtag
です。しかし、私は2つの異なるNSInteger
を渡したいと思います。UIViewのタグに似ている/似ている
アイデア?
UIViewのプロパティにtag
のような使用方法はありますか?物事は私がUITextField
NSInteger
を渡したいと思います。道はtag
です。しかし、私は2つの異なるNSInteger
を渡したいと思います。UIViewのタグに似ている/似ている
アイデア?
UITextFieldをサブクラス化し、2つのNSIntegerプロパティをクラスに追加できます。
@interface CustomTextField : UITextField
@property (nonatomic, assign) NSInteger x;
@property (nonatomic, assign) NSInteger y;
@end
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になります。これは意味のあるアドレスを持つ静的charへのポインタです。 –
@SedateAlienありがとうございます。あなたは完全に正しいです。これは私が参照していたコードのバグでした(私は今、私の製品コードを修正しました)。参照されるサンプルコードは、正しくそれを行います。あなたが注意するように、これはcharではなくchar *でなければなりません。 –
この-vs-サブクラス化を行う利点は何ですか? – lnafziger
は、一般的な、オブジェクト指向のソリューションを取るが、あなたは、タグへのデータのものをたくさんすることができます覚えている:
- (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私は同じことをしようとしていました。 :) – lnafziger