タグを使用してプログラムで一連のテキストフィールドを作成しています。各テキスト フィールドのデータにアクセスできるようにしたいのですが、最後のタグに戻ってしまいます。
この例では、10 個のテキストフィールドを作成しています。フィールドをクリックすると、そのフィールドが青色に変わるはずですが、常に最後のフィールドが青色になります。
フィールドタグにアクセスして正しいテキストフィールドにアクセスするにはどうすればよいですか?
# 送信者をテストするために NSlog を追加しました。
@implementation ViewController
@synthesize name = _name ;
- (void)viewDidLoad
{
[super viewDidLoad];
int y = 20 ;
for(int i=1; i <= 10; i++)
{
CGRect frame = CGRectMake(20, y, 100, 30 ) ;
name = [[UITextField alloc] initWithFrame:frame];
[name setTag:i] ;
[name setBackgroundColor:[UIColor whiteColor]] ;
[name addTarget:self action:@selector(makeBlue:) forControlEvents:UIControlEventTouchDown];
[self.view addSubview:name];
y += 38;
}
}
- (void)makeBlue:(id)sender
{
int i = (int)[sender tag] ;
[name setTag:i] ;
NSLog(@"%d", i);
[name setBackgroundColor:[UIColor blueColor]] ;
}
編集: それは素晴らしいです。ありがとうございました。それは確かに私の問題の1つを解決しました。2番目の問題を解決する方向に導く別の答えを期待していたと思います。タグ付けされたテキストフィールドから入力を取得して、他の場所で使用したいと考えています。最後のテキストフィールドからの入力しか得られないという同じ問題があります。
- (void)viewDidLoad
{
[super viewDidLoad];
int y = 20 ;
for(int tag=1; tag <= 10; tag++)
{
CGRect frame = CGRectMake(20, y, 100, 30 ) ;
name = [[UITextField alloc] initWithFrame:frame];
[name setTag:tag] ;
[name setBackgroundColor:[UIColor whiteColor]] ;
[name addTarget:self action:@selector(makeItSo:) forControlEvents:UIControlEventEditingDidEnd];
[self.view addSubview:name];
[name setDelegate:self] ;
y += 38;
}
}
- (void)makeItSo:(id)sender
{
int tag = (int)[sender tag] ;
[name setTag:tag] ;
NSString * aName = [name text] ;
NSLog(@"%@", aName) ;
}
この例では、makeItSo メソッドで setTag を再度使用する必要はありませんが、特定のタグから値を取得する方法がわかりません。