UISegmentedControl нулевой индекс - PullRequest
1 голос
/ 16 июня 2011

Я создавал свое приложение в основном программным способом и пытался добавить UISegmentedControl на панель инструментов UINavigationControl. У меня есть представление, созданное и показанное, и действие, когда UISegmentedControl выбран. Проблема в том, что в любой момент, когда я вызываю selectedSegmentIndex, он возвращает нулевое значение. Есть идеи почему?

    NSArray *segmentArray = [[NSArray alloc] initWithObjects:@"Factory Laods", @"User Loads", nil];

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems: segmentArray];

segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
[segmentedControl addTarget:self action:@selector(action:) forControlEvents:UIControlEventValueChanged];

    UIBarButtonItem *segmentedButton = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

NSArray *array = [[NSArray alloc] initWithObjects:flexibleSpace, segmentedButton, flexibleSpace, nil];
[self setToolbarItems:array];

-------- метод действия ------------

- (void) action:(id)sender {

UISegmentedControl *segment = (UISegmentedControl *) sender;
NSLog(@"Button %@", [segment selectedSegmentIndex]);

}

Объект FlexibleSpace - это UIBarButtonItem, инициализированный как простое пространство для центрирования UISegmentedControl. После того, как этот элемент добавлен, я могу добавить инструкцию NSLog и определить нулевое значение для selectedSegmentIndex, а также оно будет нулевым, когда событие инициируется и проверяется в методе действия. Спасибо!

Ответы [ 2 ]

1 голос
/ 16 июня 2011

selectedSegmentIndex возвращает NSInteger, а не объект.Индекс NULL - это индекс 0, т. Е. В настоящий момент выбран первый сегмент.

Кроме того, эта строка пропускает массив элементов:

UISegmentedControl *segmentedControl = [[UISegmentedControl alloc]
        initWithItems:
                [[NSArray alloc] initWithObjects: @"Item 1", @"Item 2", nil]];

Возвращается ссылка на владельцана -initWithObjects:, а соответствующий release не следует.Вы можете использовать -arrayWithObjects: или присвоить возвращенный массив временной переменной, чтобы вы могли освободить ее после инициализации сегментированного элемента управления.

1 голос
/ 16 июня 2011

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

Может быть опечатка, или ваша проблема!

...