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为您的文本字段创建一堆,而不是将它们保存在一个数组中。看看这个:教程

现在看起来您正在手动创建东西,所以在这种情况下,您可能只想声明您的数组,@property以便可以通过您的保存方法访问它。

于 2012-10-24T12:24:15.363 回答
0

要从您的数组中访问texta 的属性,UITextField您可以编写:

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

如果要访问所有文本字段,

  for(int i=0;i<[textFields count];i++) {
    UITextField *tempTxtField=[textFields objectAtIndex:i];
    NSlog(@"%@",tempTxtField);
}
于 2012-10-24T12:30:06.487 回答
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

我不完全确定我理解你的问题,但这就是我会代替你做的事情。我没有创建一个数组来保存每个文本字段,而是为它们分配一个自定义标签。任何数字都可以(尽管避免零,因为这是所有视图的默认标记)。所以你的 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。

-(无效)保存信息{

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 回答