UIViewController被解除后如何保存和恢复每个UISwitch状态

时间:2013-12-05 10:30:55

标签: ios objective-c

编辑:我仍然需要回答!

我有2个UIViewControllers(让我们称之为 ParentVC SecondVC )。

SecondVC上有11个UISwitch元素,1个按钮用于将每个UISwitch的状态从SecondVC发送到ParentVC。

在parentVC中,我需要一个包含NSDictionary键的NSArray(在IBAction中有描述)。 我有IBAction:

NSDictionary *resultDic = [NSDictionary dictionaryWithObjectsAndKeys:
                               [NSNumber numberWithBool: [_cafeSwitch isOn]], @"Cafe",
                               .....
                               [NSNumber numberWithBool: [_bowlingSwitch isOn]], @"BowlingClub",
                               nil];
    NSMutableArray *resultArray = [[NSMutableArray alloc] init];
    for (NSString *key in resultDic) {
        NSNumber *value = [resultDic valueForKey:key];
        if ([value compare:[NSNumber numberWithInt:1]] == NSOrderedSame)
            [resultArray addObject:key];
    }
    [_delegate sendSelectedPlaceTypeArray:[NSArray arrayWithArray:resultArray]];
    [self dismissViewControllerAnimated:YES completion:^{}];

方法sendSelectedPlaceTypeArray是在ParentVC中接收此NSArray的委托方法。 默认状态下选择所有切换台。 在ParentVC中,我实现了委托方法:

- (void)sendSelectedPlaceTypeArray:(NSArray *)placeTypeArray {
    filteredPlaceTypeArray_ = placeTypeArray;
}

默认情况下,filteredPlaceTypeArray_包含所有11种地点类型。

filteredPlaceTypeArray_ = [NSArray arrayWithObjects:@"Cafe", ... ,@"BowlingClub", nil];

呈现SecondVC的方法是:

- (IBAction)showPlaceTypeFilter:(id)sender {
    UIStoryboard *iPhoneStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil];
    PlaceTypeFilterViewController *destViewController = [iPhoneStoryboard instantiateViewControllerWithIdentifier:@"PlaceTypeFilterViewController"];
    destViewController.delegate = self;
    destViewController.currentFilteredPlaceTypesArray = filteredPlaceTypeArray_;
    [self presentViewController:destViewController animated:YES completion:nil];
}

我有很多问题:

  1. 使用过滤器是否是一个好方法?
  2. 如果已调用SecondVC两次或更多次,并且例如11个UISwitch元素中的2个被更改,如何保存和恢复UISwitch元素值?什么是最好的解决方案?因为当SecondVC出现时,所有UISwitch元素都被选中了。
  3. 我希望我的问题是正确的,谢谢,Artem。

1 个答案:

答案 0 :(得分:-1)

正如我对你的理解,这里是从视图中获取所有对象的方法:

for (UISwitch *mySwitch in [self.view subviews]) {
    if ([mySwitch isKindOfClass:[UISwitch class]]) {
        NSLog(@"State == %@",[mySwitch description]);
        //Do what ever you want to do with your switches 
    }
}

编辑:此答案在编辑之前与原始问题有关。

  

如何以编程方式为每个UISWitch设置状态