【问题标题】:Weird UISegmentedControl Problem!奇怪的 UISegmentedControl 问题!
【发布时间】:2010-02-17 23:18:02
【问题描述】:

在我的应用程序中,如果我的目标是使用 UISegmentedControl 来选择另一个屏幕的背景颜色。问题是我已经尝试过这样,每当您进入选项屏幕时,分段控件都会记住您在离开屏幕时选择的选项。它只记得 5 个选项中的一个!!!!这是选项屏幕中的代码 -


- (IBAction)changecolor:(id)sender {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    if(segcolor.selectedSegmentIndex == 0){
        //Red
        UIColor *red = [UIColor redColor];
        NSData *colordata = [NSKeyedArchiver archivedDataWithRootObject:red];
        [prefs setObject:colordata forKey:@"ColorKey"];
    }else if(segcolor.selectedSegmentIndex == 1){
        //Yellow
        UIColor *yellow = [UIColor yellowColor];
        NSData *colordata = [NSKeyedArchiver archivedDataWithRootObject:yellow];
        [prefs setObject:colordata forKey:@"ColorKey"];
    }else if(segcolor.selectedSegmentIndex == 2){
        //Green
        UIColor *green = [UIColor greenColor];
        NSData *colordata = [NSKeyedArchiver archivedDataWithRootObject:green];
        [prefs setObject:colordata forKey:@"ColorKey"];
    }else if(segcolor.selectedSegmentIndex == 3){
        //Blue
        UIColor *blue = [UIColor blueColor];
        NSData *colordata = [NSKeyedArchiver archivedDataWithRootObject:blue];
        [prefs setObject:colordata forKey:@"ColorKey"];
    }else if(segcolor.selectedSegmentIndex == 4){
        //Black
        UIColor *black = [UIColor blackColor];
        NSData *colordata = [NSKeyedArchiver archivedDataWithRootObject:black];
        [prefs setObject:colordata forKey:@"ColorKey"];
    }
}
前面的方法是连接IB中的'value changed'方法到segmentedcontrol,segcolor。并且...
- (void)viewWillAppear:(BOOL)animated {
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSData *colordata = [prefs objectForKey:@"ColorKey"];

    if ([NSKeyedUnarchiver unarchiveObjectWithData:colordata] == [UIColor redColor])
        segcolor.selectedSegmentIndex = 0;

    if ([NSKeyedUnarchiver unarchiveObjectWithData:colordata] == [UIColor yellowColor])
        segcolor.selectedSegmentIndex = 1;

    if ([NSKeyedUnarchiver unarchiveObjectWithData:colordata] == [UIColor greenColor])
        segcolor.selectedSegmentIndex = 2;

    if ([NSKeyedUnarchiver unarchiveObjectWithData:colordata] == [UIColor blueColor])
        segcolor.selectedSegmentIndex = 3;

    if ([NSKeyedUnarchiver unarchiveObjectWithData:colordata] == [UIColor blackColor])
        segcolor.selectedSegmentIndex = 4;
}

仅供参考,黑色是唯一能记住的选项。

现在在主页...

- (void)viewWillAppear:(BOOL)animated {
    //---------------------------------------------------------//
    //----------------------BGData-----------------------------//
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    NSData *colorData = [prefs objectForKey:@"ColorKey"];
    UIColor *bgcolor = [NSKeyedUnarchiver unarchiveObjectWithData:colorData];
    self.view.backgroundColor = bgcolor;

    if (bgcolor == [UIColor blackColor]) {
        currentArtist.textColor = [UIColor whiteColor];
        instructlabel.textColor = [UIColor whiteColor];
        currentSong.textColor   = [UIColor whiteColor];
    } else if (bgcolor != [UIColor blackColor]) {
        currentArtist.textColor = [UIColor blackColor];
        instructlabel.textColor = [UIColor blackColor];
        currentSong.textColor   = [UIColor blackColor];
    }
}

谁知道出了什么问题?

【问题讨论】:

    标签: iphone uisegmentedcontrol


    【解决方案1】:

    哎哟。您不能将 Objective-C 对象的内容与 == 进行比较。绝不。 Use -isEqual: to compare UIColors.

    而且,为什么不直接将段索引存储到用户默认值中(-setInteger:forKey:-integerForKey:)?这样你就不需要对 UIColors 进行编码和解码,这很慢而且很消耗内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2018-06-26
      • 2011-08-13
      • 2011-08-17
      • 2011-02-02
      相关资源
      最近更新 更多