Скрытие UIImageView в Touch Cocoa - PullRequest
1 голос
/ 10 января 2012

Я хочу включить отображение изображения в моей программе.Вот мой упрощенный код:

UIImage *newImage = [UIImage imageNamed:@"selected.png"];
UIImageView *selector = [[UIImageView alloc] initWithImage: newImage];
[selector setFrame: CGRectMake( 0, 0, 64, 64)];
[overView addSubview: selector];
[overView bringSubviewToFront: selector];
selector.hidden = TRUE;

[newImage release]

Далее в коде:

-(IBAction)Button1Click
{
  selector.hidden = FALSE;
}

-(IBAction)Button2Click
{
  selector.hidden = TRUE;
}

Еще позже:

[selector release];

Когда я запускаю и нажимаю две кнопки,изображение «селектор» никогда не появляется.Если я отлаживаю программу, я вижу, что программа достигает строк под IBActions, но это не имеет никакого эффекта.Вот странная вещь: если я установлю линию на раннем этапе на:

selector.hidden = FALSE;

Тогда я могу видеть «выбранное» изображение все время, и оно никогда не выключается, независимо от того, какую кнопку я нажимаю.Любые идеи?

ОБНОВЛЕНИЕ: Я знаю, что это было неясно в коде, но "селектор" находится в той же области во всем коде.Добавление «я».Чтобы «селектор» исправил проблему.Спасибо!

Ответы [ 4 ]

2 голосов
/ 10 января 2012

из ваших фрагментов кода кажется, что у вас есть свойство "селектор" (доступное в IBActions) и локальная переменная "селектор", используемая в "основном" фрагменте. Если это так, вы должны сделать что-то вроде этого:

self.selector = [[UIImageView alloc] initWithImage: newImage];

вместо

UIImageView *selector = [[UIImageView alloc] initWithImage: newImage];
1 голос
/ 10 января 2012

в вашем случае в методе 'Button1Click' (и другом) 'селектор' неизвестен, потому что он был объявлен здесь локально: UIImageView *selector = ....

Вам нужна правильная ссылка на него, доступная из вашегометоды нажатия кнопки.Вы можете объявить его в своем файле * .h, затем использовать его в любом месте вашего класса, а затем выпустить его в конце (в методе dealloc).

И, конечно, вы не должны выпускать этот UIImage.Пожалуйста, прочитайте документацию Apple по управлению памятью.Без этого будет очень трудно идти дальше:)

Я думаю, что ответ Андрея верен, но слишком короток для кого-то нового.

0 голосов
/ 10 января 2012

UIImageView *selector = [[UIImageView alloc] initWithImage: newImage];

похоже, что он "затеняет" ваш селектор ivar. Посмотрите на свой @interface и посмотрите, есть ли селектор в списке ivar. Если это так, то просто удалите часть UIImageView *.

Посмотрите на http://en.wikipedia.org/wiki/Variable_shadowing для получения дополнительной информации об этом. Вы также можете включить флаг предупреждения в XCode, который будет предупреждать вас, когда он встретит один. Удивительно, но по умолчанию он не включен.

0 голосов
/ 10 января 2012

Попробуйте это

UIImageView *selector = [[[UIImageView alloc] initWithImage: newImage] autorelease];
...