2012-06-17 39 views
0

我想有一个滑块(可以说从0到4的值)和一个相应的标签,内容不会显示当前的滑块值,但一个相应的字符串。iOS NSSlider从数组中设置标签(在索引:滑块值)

我是很新的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可以编译,但只要我尝试移动它崩溃的滑块。

回答

0

问题是您的工作分配到NSString变量mood

如果您使用的格式字符串,你将不得不使用NSString类方法stringWithFormat:因此无论是

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

mood = [sliderArray objectAtIndex:sliderValue]; 

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

NSInteger sliderValue = (NSInteger) slider.value; 
+0

非常感谢。作为一个绝对的初学者,我越来越多地学习。但Stackoverflow似乎是一个完美的学习场所。再次:谢谢! :) – Robbie

0

字符串是不可变的,所以你可以重用引用。使用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" 
} 

在这种情况下你” d改变上面的代码:

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

如果当然,你需要小心幻灯片的价值不超过情绪阵列的界限。

+0

太棒了!非常感谢! – Robbie