UISegmentedControl Не работает - PullRequest
       5

UISegmentedControl Не работает

4 голосов
/ 04 октября 2011

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

Мой метод IBAction заключается в следующем.

- (IBAction)segmentSwitch:(id)sender {

    NSLog(@"inside segmented switch");
    NSLog(@"selected segment %@",selectedSegment);
    if (selectedSegment == 0) {
        mapView.mapType = MKMapTypeStandard; 

    }
    else{
        mapView.mapType = MKMapTypeHybrid; 

    }
}

Я объявил UISegementedControl как розетку и подключил ее к представлению xib. Я также связал этот метод с касанием внутри / снаружи. Это все еще не печатает команды NSLog, приведенные выше. Что означает, что этот метод не доступен вообще?

Ответы [ 3 ]

4 голосов
/ 23 января 2013

Краткая сводка о том, как настроить UISegmentedControl в IB для тех, кто имеет более двух сегментов:

  1. IBOutlet UISegmentedControl *segmentControl; в @interface (или установить его как @property)
  2. - (IBAction)segmentedControlIndexChanged:(id)sender; в .ч до @ end
  3. перетащите «Сегментированный элемент управления» в представление и измените «Стиль» на Обычный, Граничный или Столбец
  4. Увеличение # «Сегментов»
  5. Выберите «Сегмент» и отредактируйте «Заголовок», убедившись, что флажок «Включен»
  6. Подключите ваш сегментированный элемент управления к владельцу файлов
  7. Подключите действие segmentedControlIndexChanged: и выберите «Значение изменено»НЕ «Подправляй изнутри» !!
  8. добавь немного кода, может быть, оператор переключения, если у тебя есть 4 сегмента:

-(IBAction)segmentedControlIndexChanged:(id)sender {

NSLog(@"segmentedControlIndexChanged");

switch (segmentControl.selectedSegmentIndex)
{
    case 0:
    {
        NSLog(@"dateSegmentActive");
        dateSegmentActive = YES;
        noteSegmentActive = NO;
        typeSegmentActive = NO;
        userIDSegmentActive = NO;
        [yourTable reloadData];
    }
        break;
    case 1:
    {
        NSLog(@"noteSegmentActive");
        dateSegmentActive = NO;
        noteSegmentActive = YES;
        typeSegmentActive = NO;
        userIDSegmentActive = NO;
        [yourTable reloadData];
    }
        break;
    case 2:
    {
        NSLog(@"typeSegmentActive");
        dateSegmentActive = NO;
        noteSegmentActive = NO;
        typeSegmentActive = YES;
        userIDSegmentActive = NO;
        [yourTable reloadData];
    }
        break;
    case 3:
    {
        NSLog(@"userIDSegmentActive");
        dateSegmentActive = NO;
        noteSegmentActive = NO;
        typeSegmentActive = NO;
        userIDSegmentActive = YES;
        [yourTable reloadData];
    }
        break;

    default:
        break;
}
}

В последних версиях iOS вам нужны скобки для каждого случая: иначе вы получите ошибки.Это также показывает некоторую пометку bool для отслеживания того, какой сегмент активен, возможно, для вашего метода willDisplayCell.

1 голос
/ 04 октября 2011

Надеюсь, вы выбрали правильный метод ValueChanged, а также правильно подключили выход вашего метода.

Единственное, что вам нужно сделать сейчас, это заменить ваш код вашим кодом.

- (IBAction)segmentSwitch:(UISegmentedControl *)sender 
{
    NSLog(@"inside segmented switch");
    NSLog(@"selected segment %d",sender.selectedSegmentIndex);
    if (sender.selectedSegmentIndex == 0) 
    {
        mapView.mapType = MKMapTypeStandard; 

    }
    else
    {
        mapView.mapType = MKMapTypeHybrid; 
    }
}

Попробуйте заменить этот код своим кодом.

Надеюсь, это поможет вам.

1 голос
/ 04 октября 2011

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

Является ли selectedSegment вашим UISegmentedControl?

Тогда ваш код должен быть таким:

- (IBAction) segmentSwitch:(id)sender {
    if (self.selectedSegment.selectedSegmentIndex == 0) {
        mapView.mapType = MKMapTypeStandard; 
    } else{
        mapView.mapType = MKMapTypeHybrid; 
    }
}
...