2012-06-17 2 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

Проблема заключается в вашем назначении переменной NSStringmood.

Если используется формат строки вы должны будете использовать метод 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 избыточно, поскольку после создания невозможно изменить. Аналогично, вы можете создавать массивы, которые не требуют явного управления памятью. Обратите внимание, что методы управления памятью меняются с прибытием ARC в iOS5.

Итак, попробуйте следующее создать массив.

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

Awesome! Большое спасибо! – Robbie

Смежные вопросы