UISegmentedControl не изменит значение
Я пытаюсь создать UISegmentedControl
программно. у меня есть UIViewController
в раскадровке, в которой ничего нет.
.h файл
UISegmentedControl *segmentedControl;
NSString *feedBackButtonTitle;
NSString *contactsButtonTitle;
а вот и объявления о недвижимости.
@property (nonatomic,retain) IBOutlet UISegmentedControl *segmentedControl;
-(void) segmentedControlIndexChanged;
В viewDidLoad:
Я инициализировал и добавил UISegmentedControl
,
NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0];
if ([language isEqualToString:@"en"]){
contactsButtonTitle = [[[configFileDictionary objectForKey:@"Contacts"] objectForKey:@"Label"] objectForKey:@"en"];
feedBackButtonTitle = [[[[[configFileDictionary objectForKey:@"Contacts"] objectForKey:@"Contact"]objectForKey:@"Feedback"]objectForKey:@"Label"]objectForKey:@"en"];
}
else if([language isEqualToString:@"fr"]){
contactsButtonTitle = [[[configFileDictionary objectForKey:@"Contacts"] objectForKey:@"Label"] objectForKey:@"fr"];
feedBackButtonTitle = [[[[[configFileDictionary objectForKey:@"Contacts"] objectForKey:@"Contact"]objectForKey:@"Feedback"]objectForKey:@"Label"]objectForKey:@"fr"];
}
NSArray *itemsArray = [[NSArray alloc] initWithObjects:contactsButtonTitle, feedBackButtonTitle, nil];
segmentedControl = [[UISegmentedControl alloc] initWithItems:itemsArray];
segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
//segmentedControl.selectedSegmentIndex = 0;
segmentedControl.frame = CGRectMake(0.0f, 0.0f, 320.0f,40.0f);
[segmentedControl addTarget:self action:@selector(segmentedControlIndexChanged) forControlEvents:UIControlEventValueChanged];
// [self.view addSubview:segmentedControl];
// Create view for contact display.
[self createViews];
и это (void)segmentedControlIndexChanged
-(void)segmentedControlIndexChanged
{
switch (self.segmentedControl.selectedSegmentIndex)
{
case 0:
[self createViews];
break;
case 1:
[self showFeedbackForm];
break;
default:
break;
}
}
Это хорошо показывает сегментированный элемент управления на экране, но когда я нажимаю на опции в сегментированном контроле, он всегда переходит в вариант варианта 0. Сегментированный элемент управления и открывается [self createViews];
На вставке точек останова на линии case 0
Я заметил, что опция _selectedSegment в segmentedControl равна 1. Это не имеет никакого смысла.
2 ответа
Итак, я создал в моем UIViewController
недвижимость segmentedControl
а затем написал только этот код:
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *itemsArray = [[NSArray alloc] initWithObjects:@"a", @"b", nil];
self.segmentedControl = [[UISegmentedControl alloc] initWithItems:itemsArray];
self.segmentedControl.segmentedControlStyle = UISegmentedControlStylePlain;
self.segmentedControl.selectedSegmentIndex = 0;
self.segmentedControl.frame = CGRectMake(0.0f, 0.0f, 320.0f,40.0f);
[self.segmentedControl addTarget:self action:@selector(segmentedControlIndexChanged) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:self.segmentedControl];
}
-(void)segmentedControlIndexChanged
{
switch (self.segmentedControl.selectedSegmentIndex)
{
case 0:
NSLog(@"createviews");
break;
case 1:
NSLog(@"showfeedbackform");
break;
default:
break;
}
}
Это работает для меня отлично - регистрация правильного выбора.
Как вы говорите _segmentedControl
все в порядке - обратите внимание, что я использую точечную нотацию, чтобы получить segmentedControl. Это может быть в том случае, если вы не используете точечную запись - вы не вызываете метод получения.
редактировать
Подводя итог - сегментированный контроль из вашего.h файла является излишним - это просто еще один UISegmentedControl
, Ваша собственность может быть обозначена точечной нотацией - self.segmentedControl
, Или по синтезированному имени (сделано по умолчанию) _segmentedControl
,
Итак, вы делаете ссылку на этот объект.h при инициализации и добавлении UISegmentedController
но когда segmentedControlIndexChanged
называется - вы меняете его в своей собственности, которая даже не видна.
Хорошо, несколько вещей здесь:
- Поскольку у вас есть собственность, используйте
self.segmentedControl
вместоsegmentedControl
- С простым изменением вашего селектора жизнь подписи становится проще:
[self.segmentedControl addTarget:self
action:@selector(segmentedControlIndexChanged:)
forControlEvents:UIControlEventValueChanged]; // Notice the colon
-(void)segmentedControlIndexChanged:(id)sender
{
switch ([sender selectedSegmentIndex])
{
case 0:
[self createViews];
break;
case 1:
[self showFeedbackForm];
break;
default:
break;
}
}