将对象传递给选择器操作

时间:2012-10-24 12:18:10

标签: objective-c ios xcode

好的简单问题但无法找到答案。

我有一个按钮可以在我的应用中保存信息。 我有

  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

5 个答案:

答案 0 :(得分:1)

如果使用界面构建器,您想要做的是为文本字段创建一堆IBOutlet,而不是将它们保存在数组中。看看这个:tutorial

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

答案 1 :(得分:0)

要从您的数组中访问text的{​​{1}}属性,您可以写:

UITextField

答案 2 :(得分:0)

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

  for(int i=0;i<[textFields count];i++) {
    UITextField *tempTxtField=[textFields objectAtIndex:i];
    NSlog(@"%@",tempTxtField);
}

答案 3 :(得分: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];
}

答案 4 :(得分: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。

希望有所帮助!祝你好运!