【问题标题】:IOS NSSlider set label from array (at index: slider value)IOS NSSlider 从数组中设置标签(在索引处:滑块值)
【发布时间】:2012-06-17 16:07:55
【问题描述】:

我想要一个滑块(比如说从 0 到 4 的值)和一个相应的标签,该标签的内容不显示当前滑块值,而是一个相应的字符串。

我对 Objective-C 很陌生,但这是我尝试过的(......但没有用;))

首先我做了一个数组:

sliderArray = [[NSArray alloc] initWithObjects:
@"sad" @"not so good" @"average" @"good" @"awesome", nil];

然后我定义了动作:

(IBAction)sliderChange:(id)sender {
   UISlider *slider = (UISlider *) sender;
   NSString *mood = [[NSString alloc] init];
   mood = @"%@", [sliderArray objectAtIndex:(int)[slider value]];
   [sliderLabelMood setText:mood];
}

Xcode 可以编译,但我一尝试移动滑块,它就会崩溃。

【问题讨论】:

    标签: ios arrays text label nsslider


    【解决方案1】:

    问题是您对NSString 变量mood 的赋值。

    如果您使用格式字符串,则必须使用NSString 类方法stringWithFormat:,因此也可以

    mood = [NSString stringWithFormat:@"%@", 
       [sliderArray objectAtIndex:sliderValue]]; 
    

    mood = [sliderArray objectAtIndex:sliderValue]; 
    

    此外,您应该确保滑块值确实返回NSInteger。滑块的value 属性的正常类型是float。因此:

    NSInteger sliderValue = (NSInteger) slider.value; 
    

    【讨论】:

    • 非常感谢。作为一个绝对的初学者,我正在学习越来越多的东西。但是 Stackoverflow 似乎是一个完美的学习场所。再次:谢谢! :)
    【解决方案2】:

    字符串是不可变的,因此您可以重用引用。使用 alloc/init 创建一个是多余的,因为它在创建后无法更改。同样,您可以创建不需要显式内存管理的数组。请注意,随着 iOS5 中 ARC 的到来,内存管理技术发生了变化。

    所以,请尝试以下方法来创建您的数组。

    sliderArray = [NSArray arrayWithObjects:@"sad", @"not so good", @"average", @"good", @"awesome", nil]; 
    

    然后显示心情标签:

    NSInteger index = [slider value];
    NSString *mood = [sliderArray objectAtIndex:index];
    [sliderLabelMood setText:mood];
    

    您也可以考虑将标签数组设为静态,因为它是恒定且固定长度的:

    static NSString* moods[] = {
        @"sad", @"not so good", @"average", @"good", @"awesome"
    }
    

    在这种情况下,您将更改上述代码:

    NSInteger index = [slider value];
    [sliderLabelMood setText:moods[index]];
    

    当然,你需要注意幻灯片的值不要超过moods数组的边界。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2016-02-02
      • 2021-08-05
      相关资源
      最近更新 更多