好的简单问题但无法找到答案。
我有一个按钮可以在我的应用中保存信息。 我有
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
答案 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。
希望有所帮助!祝你好运!