Создайте несколько UITextFields программно, используя цикл for - PullRequest
1 голос
/ 11 июля 2011

Совершенно новый для кодирования;использовала stackoverflow религиозно в течение нескольких месяцев;впервые задаю вопрос;пожалуйста, будьте осторожны.

Я пытаюсь создать серию UITextFields программно, используя цикл for.Поля должны иметь такие имена, как "pax1name", "pax2name", "pax3name" и т. Д.

Мне не хватает части, как взять строку и сделать ее именем textField, изменив имяtextField каждый раз, когда цикл for выполняется.

Вот мой код, но, может быть, я ошибаюсь?Заранее спасибо!

// set up the names textfields
for (int i = 0; i < 7; i++) {
    NSString *fieldName = [[NSString alloc] initWithFormat:@"pax%iname", (i + 1)];

    // I can't figure out what goes here to create a UITextField with the name of fieldName

    textField = [[UITextField alloc] initWithFrame:CGRectMake(15, (15 + (i * 40)), 400, 40)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:15.0];
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;

    [namesViewController addSubview: textField];

    [fieldName release];
    [textField release];
}

Ответы [ 4 ]

1 голос
/ 11 июля 2011

Когда вы произносите имя текстового поля, я предполагаю, что вы имеете в виду имя переменной, а не настройку отображаемого текста. То есть Вы хотите создать переменные в цикле, но позже сможете ссылаться на них по имени.

В этом случае вы не можете делать то, что хотите. Что вы можете сделать, это вставить их в массив для удобного доступа позже.

NSMutableArray *paxNameFields = [[NSMutableArray alloc] init]; // before your loop
[paxNameFields addObject: textField]; // inside the loop
[paxNameFields objectAtIndex: 5]; //sometime later use the 6th field

Или, если вы просто хотите определить, какой UITextField вы передали в обратный вызов делегата, вы можете установить / проверить свойство tag.

1 голос
/ 11 июля 2011

Я думаю, что вы поступили неправильно по этому поводу. UITextField не имеет свойства с именем "name".Чтобы идентифицировать элемент управления, вы можете использовать его свойство tag.Смотрите этот код:

for (int i = 0; i < 7; i++) {

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(...)];
    textField.tag = i + 1;
    ...
}
1 голос
/ 11 июля 2011

Обычно для этого вы используете свойство UIView tag.Используйте [textField setTag:<youCustomTag>] в вашем цикле для установки значения, например, вашу переменную i.Обратите внимание, что tag ожидает NSUInteger, а не NSString.

Чтобы впоследствии получить доступ к правильному текстовому полю, вы должны позвонить [[namesViewController view] viewWithTag:<yourCustomTag>].

НО ,действительно необходимо создать несколько текстовых полей для вашего контроллера представления?Может быть более элегантное решение, если создать только одно текстовое поле и установить свойство тега по требованию, когда пользователь нажимает на строку.Я не знаю, сработает ли это для вас.

0 голосов
/ 11 июля 2011

UITextFields не имеют имен.Вы, вероятно, пришли из мира HTML, где эти вещи представляют собой большой хэш пар имя-значение.Не так, как в Cocoa Touch.Как говорит @Florian Mielke, у каждого из них есть свойство int .tag, которое, вероятно, вы хотите установить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...