xcode iphone Сравнивает UIButton от: (id) отправителя с UIButtons из массива

#xcode #uiview #if-statement #nsmutablearray #compare

#xcode #uiview #if-оператор #nsmutablearray #Сравнить

Вопрос:

У меня есть несколько представлений с кнопками на нем. Все эти представления связаны с одним ViewController, и в этом ViewController у меня есть IBOutlets, определенные для всех этих 50 кнопок.

Чтобы упростить доступ к ним, я сохранил все UIButtons в многомерном NSMutableArray. В целях тестирования я присвоил всем кнопкам уникальную метку titleLabel. UIButtons правильно сохранены в массиве, я могу проверить это с помощью titleLabel.

После нажатия одной кнопки я вызываю метод:

 -(IBAction)pushButton:(id)sender
  

Там я сравниваю:

 if ( [allButtonsArray objectAtIndex:1] == sender ) 
// do something
  

Несмотря на то, что выбранный UIButton из массива и кнопка отправителя имеют одинаковый titleLabel (который в моем случае уникален), утверждение IF неверно.

У кого-нибудь есть идея, почему?

Спасибо, Пэт

Ответ №1:

вы пробовали использовать их как UIButtons?

if ( (UIButton *)[allButtonsArray objectAtIndex:1] == (UIButton *)sender )

или используйте isEqual метод вместо ==

кроме того, почему бы просто не сравнить titleLabel вместо этого?

Ответ №2:

Я просто вывожу UIButton с помощью NSLog% @, который я сравниваю, и обнаружил, что такая информация, как «Frame», «opaque», «CALayer» и т.д., одинакова, Но:

Реальный идентификатор памяти, такой как «UIRoundedRectButton: =x4b3f7f0», отличается, поэтому оператор IF никогда не является истинным.

Что я сделал сейчас, так это присвоил каждой UIButton в построителе интерфейса определенное значение тега (в разделе View). К этому тегу можно получить доступ с помощью [тега отправителя], и его можно легко сравнить с числовым массивом, чтобы проверить, какая кнопка была нажата.