Обобщение связей элементов пользовательского интерфейса в одном представлении iOS - PullRequest
0 голосов
/ 14 ноября 2011

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

- (void) updateAlphaTextField:(id)sender 
{
    int value = [alphaSlider value];

    NSString *stringValue = [NSString stringWithFormat:@"%d",value];

    [alphaTextField setText:stringValue];    
}

Однако у меня есть около 20 текстовых полей (и 20 соответствующих ползунков), которые я хотел бы продемонстрировать, и я не хочу писать 20 таких функций обновления.

Есть ли функция, которую я могу написать, которая могла бы просматривать все ползунки и обновлять соответствующее текстовое поле с правильным значением? Если да, то как мне установить соединение с IB, чтобы оно заработало? (Для выполнения вышеуказанной функции требуется 1 соединение IB)

Или, что еще лучше, есть функция Cocoa Touch, которая позволяет мне легко это делать?

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Поместите теги в свои UITextFields и UISliders. Например: UITextField 1 будет иметь tag 1, а UISlider 1 также будет иметь tag 1. Затем создайте коллекцию IBOutlet со всеми вашими UITextField s. Вы можете использовать это, чтобы помочь вам:

http://www.bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection/

В вашей функции сделайте это:

- (void) updateAlphaTextField:(id)sender 
{
    int value = [alphaSlider value];

    NSString *stringValue = [NSString stringWithFormat:@"%d",value];

    UISlider *senderSlider = (UISlider*)sender;

    for(UITextField *textField in textFieldCollection){
       if(textField.tag==senderSlider.tag){
           [textField setText:stringValue];   
       }
    }

}

0 голосов
/ 14 ноября 2011

Вы можете обрабатывать все ваши изменения UISlider в вашем контроллере представления.Чтобы сопоставить ползунок с конкретным текстовым полем, задайте для обоих одинаковое свойство tag.Затем вы можете перечислить все свои текстовые поля и проверить, равно ли свойство tag.

[mySlider1 addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
[mySlider2 addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];

И в вашем методе sliderValueChanged::

for (UITextField *textField in allMyTextFields) {
    if (sender.tag == textField.tag) {
        [textField setText:[NSString stringWithFormat:@"%d", value]];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...