0

簡単な質問ですが、答えが見つかりません。

アプリに情報を保存するためのボタンがあります。私は持っている

  NSMutableArray *textFields = [[NSMutableArray alloc] initWithCapacity:5];
    UITextField *textField = nil;

これは保存したい情報です。textFields mutablearray に 5 つのテキストフィールドがあります。

[save addTarget:self action:@selector(saveInfo)
 forControlEvents:UIControlEventTouchUpInside];

-(void)saveInfo {
    [[[NSUserDefaults standardUserDefaults] setValue: ????? forKey:@"Phone"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

問題は、 saveInfo void の textFields[1].text などにアクセスして情報を取得する方法です。

分かりやすくするために、クラス全体を追加しました。それはそれほど大きくはなく、誰かがそれが私の実装の問題であることに気付くかもしれません。

@implementation Settings

- (id)init: (TableViewController*) TableControll {
  NSMutableArray *textFields = [[NSMutableArray alloc] initWithCapacity:5];
    UITextField *textField = nil;

    for (int i = 0; i < 3; i++) {
        textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f+(i*35), 120.0f, 30.0f)];
        textField.backgroundColor = [UIColor whiteColor];
        [textField setBorderStyle:(UITextBorderStyleRoundedRect)];
        [TableControll.view addSubview:textField];

        [textFields addObject:textField];
        [textField release]; textField = nil;
    }
    UITextField *textName = textFields[0];
    textName.placeholder = @"Vardas";

    UITextField *textNo = textFields[1];
    textNo.placeholder = @"Telefonas";
    textNo.keyboardType = UIKeyboardTypeNumberPad;
    UITextField *textPin = textFields[2];
    textPin.keyboardType = UIKeyboardTypeNumberPad;
    textPin.placeholder = @"Pin";

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    button.frame = CGRectMake(150, 20, 160, 30);
    [button setTitle:@"Advanced settings" forState:UIControlStateNormal];
    [TableControll.view addSubview:button];
    UIButton *save = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    save.frame = CGRectMake(150, 60, 160, 30);
    [save setTitle:@"Save settings" forState:UIControlStateNormal];
    [TableControll.view addSubview:save];
    [button addTarget:self action:@selector(goAdvanced)
     forControlEvents:UIControlEventTouchUpInside];
    [save addTarget:self action:@selector(saveInfo)
     forControlEvents:UIControlEventTouchUpInside];

    return self;
}

-(void)goAdvanced {
    AppDelegate *newControll = (AppDelegate*)[UIApplication sharedApplication].delegate;
    [newControll ChangeController];
}

-(void)saveInfo {

    for(int i=0;i<5;i++) {
        UITextField *tempTxtField=[_textFields objectAtIndex:i];
        NSLog(@"do it %@",tempTxtField.text);
    }

}

@end
4

5 に答える 5

1

インターフェイスビルダーを使用している場合にやりたいことはIBOutlet、テキストフィールドを配列に保持するのではなく、たくさん作成することです。これをチェックしてください:チュートリアル

手作業で何かを作成しているように見えるので、この場合は、@propertysave メソッドでアクセスできるように配列を宣言するだけでよいでしょう。

于 2012-10-24T12:24:15.363 に答える
0
-(void)saveInfo {
    NSMutableArray *tempArr = [NSMutableArray array];
    for(int i = 0; i < [textFieldsArray count]; i++){
        [tempArr addObject:[(UITextField*)[textFieldsArray objectAtIndex:i]text]];
    }
    [[[NSUserDefaults standardUserDefaults] setValue:tempArr forKey:@"Phone"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
于 2012-10-24T12:56:35.700 に答える
0

配列からのtextプロパティにアクセスするには、次のように記述します。UITextField

((UITextField *)[textFields objectAtIndex:1]).text
于 2012-10-24T12:26:28.957 に答える
0

私はあなたの質問を完全に理解しているとは言えませんが、これは私があなたの代わりに行うことです. 各テキスト フィールドを保持する配列を作成する代わりに、カスタム タグを割り当てるだけです。任意の数値が機能します (ただし、ゼロはすべてのビューのデフォルトのタグであるため)。したがって、init メソッドは次のようになります。

for (int i = 0; i < 3; i++) {
    textField = [[UITextField alloc] initWithFrame:CGRectMake(0.0f, 0.0f+(i*35), 120.0f, 30.0f)];
    textField.backgroundColor = [UIColor whiteColor];
    textField.tag = (i+1);
    [textField setBorderStyle:(UITextBorderStyleRoundedRect)];
    [TableControll.view addSubview:textField];
    [textField release]; textField = nil;
}

次に、テキスト フィールドを参照するコードで、そのタグでビューを取得し、必ず UITextField としてキャストします。

-(void)saveInfo {

for(int i=0;i<5;i++) {
    UITextField *textField = nil;
    UIView *view = [self.view viewsWithTag:i];
    if ([view isKindOfClass:[UITextField class]]) {
        textField = (UITextField *) view;
        NSLog(@"do it %@",textField.text)
    }

}

}

注: 私は self.view を参照していますが、TableControll.view を参照する必要があります。コードのどこかに参照を保持する必要があります。また、ARC の使用を開始することをお勧めします。

それが役立つことを願っています! 幸運を!

于 2012-10-24T13:55:07.243 に答える
0

すべてのテキストフィールドにアクセスしたい場合は、

  for(int i=0;i<[textFields count];i++) {
    UITextField *tempTxtField=[textFields objectAtIndex:i];
    NSlog(@"%@",tempTxtField);
}
于 2012-10-24T12:30:06.487 に答える