2013-06-19 4 views
1

У меня есть UIView, у которого есть некоторые кнопки, в которые мне нужно добавить действия.addTarget для другого класса

Я попытался это:

HeaderViewController * header = [[HeaderViewController alloc]initWithNibName:@"HeaderViewController" bundle:[NSBundle mainBundle]]; 

[header.aboutUs addTarget:self action:@selector(aboutUsPage:) forControlEvents:UIControlEventTouchUpInside]; 
[header.MyLibrary addTarget:self action:@selector(myLibraryPage:) forControlEvents:UIControlEventTouchUpInside]; 
[self.tableView addParallaxWithView:header.view andHeight:229]; 

Но кнопка не реагирует на все.

Что я сделал не так.

+0

... вы остановили методы, которые вы пытаетесь назвать? Или что-то вроде отладки? – lxt

+0

U поставил цель как себя, вместо того, чтобы у себя нужно было поставить ссылку для этого класса, где вы хотите реализовать действие. – Exploring

+0

Это сбой после нажатия кнопки? – Durgaprasad

ответ

1

Вот что вы делаете, вы создаете контроллер вида, а затем устанавливаете цели и действия для кнопок, на которые ссылаются как свойство контроллера представления.

Я подозреваю, что если вы зарегистрируете или поместите контрольную точку непосредственно перед установкой цели и действий, а затем выполните шаг, кнопки будут нулевыми.

Контроллеры просмотра загружают свои взгляды лениво. Поэтому, хотя вы создали контроллер вида, вы не попросили его загрузить его. Таким образом, кнопки не были созданы из наконечника. Таким образом, свойства ноль, а не целевое действие получает множество.

Первый вариант фиксации это переместить последнюю строку так это выглядит следующим образом:

[self.tableView addParallaxWithView:header.view andHeight:229]; 
[header.aboutUs addTarget:self action:@selector(aboutUsPage:) forControlEvents:UIControlEventTouchUpInside]; 
[header.MyLibrary addTarget:self action:@selector(myLibraryPage:) forControlEvents:UIControlEventTouchUpInside]; 

Таким образом, вы вызываете вид, который будет инициализировать его, и параметры кнопки не должны быть нулевыми после этого.

Классный способ сделать это - определить протокол для ответа на клики на кнопке и сделать диспетчер вызовов вызовов делегатом, который реализует методы протокола. Таким образом, вы должны установить делегат только при создании объекта, и вам не нужно каждый раз настраивать кнопки.

+0

спасибо, что помогли –

0

Если вы пишете:

[header.aboutUs setTarget:self]; 

И если ваш класс (я имею в виду здесь самость) реализует функцию aboutUsPage:, она должна работать.

+0

@Abizern: Umm, header.aboutUs является свойством контроллера вида, который очень хорошо может быть кнопкой ... – lnafziger

+0

@Abizem Ну, если у меня есть два контроллера вида vc1 и vc2, vc1 с кнопкой b1, выполняющей селектор s1, и если vc2 реализует s1 тоже, изменение цели, как и я, работает ... – zbMax

+0

Хорошо - cue мое красное лицо, я этого не видел. – Abizern

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