2013-09-16 5 views
0

У меня есть некоторый код, где может или не может быть объектами в массиве ... это код, который я имею дело с:Каков наиболее эффективный способ перемещения объектов NSArray в UITextFields?

 oServices1.text = CustomServicesArray[0]; 
     oServices2.text = CustomServicesArray[1]; 
     oServices3.text = CustomServicesArray[2]; 
     oServices4.text = CustomServicesArray[3]; 
     oServices5.text = CustomServicesArray[4]; 
     oServices6.text = CustomServicesArray[5]; 
     oServices7.text = CustomServicesArray[6]; 
     oServices8.text = CustomServicesArray[7]; 
     oServices9.text = CustomServicesArray[8]; 
     oServices10.text = CustomServicesArray[9]; 
     oServices11.text = CustomServicesArray[10]; 
     oServices12.text = CustomServicesArray[11]; 
     oServices13.text = CustomServicesArray[12]; 
     oServices14.text = CustomServicesArray[13]; 
     oServices15.text = CustomServicesArray[14]; 
     oServices16.text = CustomServicesArray[15]; 
     oServices17.text = CustomServicesArray[16]; 
     oServices18.text = CustomServicesArray[17]; 
     oServices19.text = CustomServicesArray[18]; 
     oServices20.text = CustomServicesArray[19]; 
     oServices21.text = CustomServicesArray[20]; 
     oServices22.text = CustomServicesArray[21]; 
     oServices23.text = CustomServicesArray[22]; 

Вместо того, чтобы проверить каждый, и каждый объект массива для ноля, есть Я могу использовать oServices * xx * .text UIFields и помещать их в какой-то массив, чтобы я мог просто использовать цикл?

+0

Возможный дубликат [Динамические имена переменных iOS] (http://stackoverflow.com/questions/9936183/dynamic-variable-names-ios) –

ответ

2

Вы знаете о рефлексивности? С КВЦ вы можете сэкономить много кода и времени:

for(int i=1; i<=23; i++) { 
    NSString* key= [NSString stringWithFormat: @"oServices%d"i]; 
    // Remember that variables should start with a lowercase letter 
    [[self valueForKey: key] setText: customServicesArray[i-1] ]; 
} 

Но если вы не хотите, чтобы связать все эти переменные в вашей раскадровке файл/XIb (даже это может быть слишком много), просто установите тег каждый из текстового поля в том порядке, который вы хотите (от 1), так что вы можете получить их обратно с помощью viewWithTag:

// From the UIViewController 
for(int i=1; i<=23; i++) { // Consider defining a constant instead of 23 
    [[self.view viewWithTag: i] setText: customServicesArray[i-1] ]; 
} 

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

+0

Это именно то, что я искал ... Я забыл о конкатенации строк ... работает как чемпион! Спасибо всем за ваши предложения! SD – SpokaneDude

0

Вы можете использовать OutletCollection для хранения oServices и цикла для этого. Обратите внимание, однако, что коллекции выпускников не сортируются, поэтому вам нужно будет их отсортировать заранее (например, по критериям тегов или по местоположению).

Для заказа см. this question.

+0

Разве они не были бы в «отсортированном» порядке, если бы я использовал индекс для обратитесь к объекту в OutletCollection и тому же индексу, чтобы обратиться к customServicesArray? – SpokaneDude

+0

@ spokane-dude в прошлый раз, когда я проверил, произошла ошибка в заказе exitCollections, поэтому индекс не обязательно отражает данные, которые вы хотите представить. См. Связанный вопрос в моем ответе. – David

+0

Я просто попытался создать OrderedCollection ... есть 24 UITextFields, но когда я делаю NSLog, чтобы увидеть, что находится внутри OrderedCollection, я получаю следующее: ** servicesOUtletCollection: ( ) ; layer = > " ) ** Итак, как проверить, что у меня есть правильные поля в OC? – SpokaneDude

0

Установите свойство UITextFields tag на соответствующий порядковый номер в массиве. Значение по умолчанию для тега равно 0, поэтому вам может потребоваться установить свойство tag в порядковый номер + 1, если в родительском представлении ваших UITextFields есть другие представления. В родительском представлении ваших текстовых полей вы можете использовать метод viewWithTag: для извлечения соответствующего UITextField.

Смежные вопросы