UISegmentedControl метод для установки индекса сегмента? - PullRequest
0 голосов
/ 04 декабря 2011

Я использую UISegmentedControl в представлении для выбора конкретного клиента.Затем это устанавливает свойство NSString в моей модели данных из уникального заголовка сегмента, как и когда представление закрыто.Все работает именно так, как я надеялся.Когда я перезагружаю представление в зависимости от того, что хранится в модели, я тогда устанавливаю UISegmentedControl со следующим кодом в viewDidLoad.то есть он считывает строковое свойство из модели, преобразует его в индекс и выбирает правильный сегмент, чтобы отразить, какой клиент хранится в модели.

    if ([self.itemToEdit.client isEqualToString:@"John"]) {
        myIndex = 3;
    } else if ([self.itemToEdit.client isEqualToString:@"David"]) {
        myIndex = 2;
    } else if ([self.itemToEdit.client isEqualToString:@"Paul"]) {
        myIndex = 1;
    } else if ([self.itemToEdit.client isEqualToString:@"Stephen"]) {
        myIndex = 0;
    }

    self.reportEditorClient.selectedSegmentIndex = myIndex;

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

Ответы [ 2 ]

0 голосов
/ 04 декабря 2011

Поместите это сопоставление имени в индекс в словаре, тогда эта цепочка if-else в значительной степени станет однострочной.

0 голосов
/ 04 декабря 2011

В отношении форматирования кода вы можете использовать массив имен

NSArray *names = [NSArray arrayWithObjects:@"John", @"David", @"Paul", @"Stephen", nil];

, а затем

self.reportEditorClient.selectedSegmentIndex = [names indexOfObject:self.itemToEdit.client];

(хотя это только немного лучше)

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