2014-01-26 2 views
0

Как говорится в заголовке ... Мне нужно изменить содержимое моего UILabel на случайный объект из NSArray, нажав кнопку UIButton ... Вот код i имеют в кнопке:Измените текст UILabel на случайный объект массива, нажав UIButton

- (IBAction)moodButton:(UILongPressGestureRecognizer *)sender { 
    UILabel *moodLabel = [[UILabel alloc] init]; 

    if (sender.state == UIGestureRecognizerStateEnded) { 
     NSArray *moodArray = [[NSArray alloc] initWithObjects:@"Happy", @"Angry", @"Sad", @"Bored", 
           @"Tired", @"Stressed", @"Busy", nil]; 
     id randomObject = [moodArray objectAtIndex:arc4random_uniform([moodArray count])]; 

     if (randomObject == moodArray[0]) { 
      moodLabel.text = @"Happy"; 
     } 
     else if (randomObject == moodArray[1]) { 
      moodLabel.text = @"Angry"; 
     } 
     else if (randomObject == moodArray[2]) { 
      moodLabel.text = @"Sad"; 
     } 
     else if (randomObject == moodArray[3]) { 
      moodLabel.text = @"Bored"; 
     } 
     else if (randomObject == moodArray[4]) { 
      moodLabel.text = @"Tired"; 
     } 
     else if (randomObject == moodArray[5]) { 
      moodLabel.text = @"Stressed"; 
     } 
     else if (randomObject == moodArray[6]) { 
      moodLabel.text = @"Busy"; 
     } 

} 
} 

Что я делаю неправильно?

Заранее спасибо.

+0

Что не так ??? Это сбой ??? Является ли ярлык не обновляющимся? –

+0

Метка не обновляется ... Извините, должно быть, упомянули об этом – Dyllan

ответ

1

У вас есть ряд проблем с кодом.

  1. Вы создаете новую метку, а затем ничего не делаете с ней, кроме добавления какого-либо текста (даже не добавляя его в другое представление). У вас есть существующая метка, которую вы хотите использовать? Я бы рекомендовал вам сохранить свойство, указывающее на ярлык в вашем представлении, который вы можете использовать, чтобы просто обновить текст.

  2. Все ваше заявление if полностью резервировано. randomObject уже содержит случайную строку из вашего массива, поэтому вам не нужно вручную проверять, какое значение оно содержит. Просто удалите всю if заявление и сделать:

    moodLabel.text = (NSString *)randomObject;

+0

Также - ваша кнопка имеет несколько функций? Один для обычного крана, а другой для крана и удержания? Просто интересно, почему вы используете распознаватель жестов. –

+0

Нет. У меня есть только один длинный трюк. – Dyllan

+0

И 'randomObject' должен быть просто' NSString', а не 'id'. – rmaddy

0

Ответ Джеймсом охватывает вопросы, но я думал, что прояснить, показывая код.

- (IBAction)moodButton:(UILongPressGestureRecognizer *)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) { 
     NSArray *moodArray = @[ @"Happy", @"Angry", @"Sad", @"Bored", 
           @"Tired", @"Stressed", @"Busy" ]; 

     NSString *randomString = moodArray[arc4random_uniform([moodArray count])]; 

     self.moodLabel.text = randomString; 
    } 
} 

Обратите внимание, что метка должна быть получена с существующей этикетки. Не создавайте новую. Также обратите внимание на использование современного синтаксиса Objective-C для массива и его доступа.

+0

Нет, я понял это. Я был в замешательстве. :) – rmaddy

+0

Вы исправили, как вы получаете ссылку на существующую метку? Вы не предоставляете достаточно подробностей, чтобы узнать, как вам нужно получить доступ к существующей метке. – rmaddy

+0

Вы помещаете метку, которую хотите обновить. У вас уже есть этикетка, верно? Используйте ссылку на эту метку. Проблема с кодом в вашем вопросе заключается в том, что вы создаете новую метку и обновляете ее. Вам нужно обновить метку, которая уже существует и уже находится на экране. – rmaddy

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