#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). К этому тегу можно получить доступ с помощью [тега отправителя], и его можно легко сравнить с числовым массивом, чтобы проверить, какая кнопка была нажата.