0

タグを使用してプログラムで一連のテキストフィールドを作成しています。各テキスト フィールドのデータにアクセスできるようにしたいのですが、最後のタグに戻ってしまいます。

この例では、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 を再度使用する必要はありませんが、特定のタグから値を取得する方法がわかりません。

4

2 に答える 2

0

あなたのmakeBlue: 方法では、理由もなくタグを再割り当てしています。これはビューを変更しません。nameタグを変更しても、変数はループで作成された最後のビューを指します。タグを使用してビューにアクセスする場合:

[self.view viewWithTag:<tag>]

したがって、makeBlue:コードは次のようになります。

- (void)makeBlue:(id)sender
{
    int tag = (int)[sender tag] ;
    UIView *tagView = [self.view viewWithTag:tag]
    [tagView setBackgroundColor:[UIColor blueColor]] ;
}

したがって、テキスト フィールドの値を取得するには、次のようにします。

 name = [self.view viewWithTag:[sender tag]];
 NSString *fieldText = name.text;
于 2013-03-21T12:33:26.217 に答える