#ios #objective-c #uisegmentedcontrol
#iOS #objective-c #uisegmentedcontrol
Вопрос:
у меня проблема, у меня есть сегментированный элемент управления и 2 кнопки.
Эти 2 кнопки ведут к контроллерам табличного представления, где пользователь выбирает входные данные
но когда пользователь выбирает сегмент сегментированного элемента управления и переходит к контроллеру tableview, выбор возвращается к значению по умолчанию.
- (IBAction)selectionOfTransportation:(id)sender {
ran =((UISegmentedControl *)sender).selectedSegmentIndex;
NSLog(@"%d",ran);
switch (ran) {
case 0://vapur
NSLog(@"0 ");
path = [[NSBundle mainBundle] pathForResource:@"vapurWeekdays" ofType:@"plist"];
arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];
ran=0;
break;
case 1:
NSLog(@"1");
path = [[NSBundle mainBundle] pathForResource:@"denizotobus" ofType:@"plist"];
arrayOfPlist = [[NSArray alloc] initWithContentsOfFile:path];
ran=1;
break;
case 2:
break;
}
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
[settings setInteger:ran forKey:@"MySelectedValueKey"];
}
это мой код.
Я сохранил значение в NSUserDefaults и попытался изменить выбор, но, похоже, нигде не могу использовать segment.selectedSegmentIndex!
Сначала я определил сегментированный элемент управления как действие, но я даже пытался определить его в файле .h.
как я могу это использовать?
Или, что еще лучше, как я могу запомнить выбор сегментированного элемента управления
Комментарии:
1. Это должно происходить по умолчанию… вам не нужно указывать, какую вкладку выделить. Вызывали ли вы этот метод «selectionOfTransportation» в событии UIControlEventValueChanged для вашего UISegmentedControl?
2. нет, никогда не слышал о событии UIControlEventValueChanged. Я не понимаю, вы говорите, что сегментированный элемент управления запоминает выбор по умолчанию, даже если изменяется элемент управления просмотром? @Zhang
3. Если вы не имеете в виду, что ваш сегментированный элемент управления находится внутри UIViewController, который вы помещаете в стек навигации, в противном случае ваш сегментированный элемент управления не должен изменять свой выбор. Вы имеете в виду, что на вашей главной странице у вас есть UIViewController, у которого есть сегментированный элемент управления и кнопка 2, вы меняете выбранную вкладку сегмента, нажимаете одну из кнопок, чтобы нажать новый контроллер представления, измените какое-либо значение, нажмите кнопку «Назад», и ваш сегментированный элемент управления сбрасывает ранее выбранную вкладку?
Ответ №1:
пожалуйста, попробуйте этот пример.
сначала отбросьте и перетащите сегмент в xib.
в файле .h
IBOutlet UISegmentedControl *mySegmentedControl;
в файле .m
- (void)viewDidLoad
{
[super viewDidLoad];
[mySegmentedControl setSelectedSegmentIndex:0];
[mySegmentedControl addTarget:self action:@selector(segmentSwitch:)
forControlEvents:UIControlEventValueChanged];
}
- (IBAction)segmentSwitch:(id)sender
{
int ran=mySegmentedControl.selectedSegmentIndex;
**or**
int ran;
if(mySegmentedControl.selectedSegmentIndex == 0)
{
ran=0;
}
else if(mySegmentedControl.selectedSegmentIndex == 1)
{
ran=1;
}
else if(mySegmentedControl.selectedSegmentIndex == 2)
{
ran=2;
}
else if(mySegmentedControl.selectedSegmentIndex == 3)
{
ran=3;
}
}
Ответ №2:
вы забыли синхронизировать userdefault. если вы не синхронизируете, значение не отображается
NSUserDefaults *settings = [NSUserDefaults standardUserDefaults];
[settings setInteger:ran forKey:@"MySelectedValueKey"];
//Add This Line
[settings synchronize];
Это синхронизирует пользовательские ошибки, и вы можете использовать их в других контроллерах