2010-10-21 2 views
4

Я подклассы UIControl и в нем я посылаю:Подкласс UIControl не может принять цель?

[self sendActionsForControlEvents:UIControlEventValueChanged]; 

Когда я создаю экземпляр объекта, я добавляю цель следующим образом:

[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged]; 

мнение проявляется в порядке, и без целевой функции функциональность работает хорошо. Но с добавлением цели она падает. Любые идеи почему?

Мой класс объявлен с:

@interface RMStarRating : UIControl {...} 

Для чего это стоит, я настроил свой вид в - (void)layoutSubviews. Есть ли другой метод, который мне нужен для подкласса, чтобы цели были правильно сохранены или чтобы цели были отправлены правильными действиями? Я думал, что UIControl справляется с сохранением целей и действий для вас.

UPDATE: попытка предоставить больше информации

Я установил объект следующим образом:

RMStarRating *starView = [[RMStarRating alloc] initWithFrame:CGRectMake(10, 70, 23*5, 30)]; 
[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged]; 
.... 
[self.view addSubview:starView]; 

Мои sendAction, согласно предложению Иордании:

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event { 
    NSLog(@"send action"); 
    [super sendAction:action to:target forEvent:event]; 
} 

Моя функция, которая вызывает sendActionsForControlEvents :

- (void)updateValue:(UITouch *)touch { 
    .... 
    NSLog(@"sendActionsForControlEvents"); 
    [self sendActionsForControlEvents:UIControlEventValueChanged]; 
} 

И функция, которая должна быть вызвана (и это в заголовке тоже):

- (void)starRatingChanged:(id)sender { 
    NSLog(@"star rating changed"); 
} 

И журнал просто выплевывает:

2010-10-22 09:45:41.348 MyApp[72164:207] sendActionsForControlEvents 
2010-10-22 09:45:41.350 MyApp[72164:207] send action 

отладчик имеет:

debugger picture

+0

Почему он падает? Какая строка кода? Что говорит стек вызовов? Трудно спекулятивно диагностировать сбои. –

+0

Я не знаю, почему он разбился, вот что я пытаюсь выяснить. Он вылетает на sendActionsForControlEvents: (если я не отвечу Джордану, и в этом случае он выйдет из строя во время него). Что-то не так между подключением UIController и моим классом, я думаю. И журнал не плюет ничего, когда он умирает. – RyanJM

ответ

0

Хорошо, я понял, что это было. Я слишком рано выпускал родительский класс, поэтому не было объекта для отправки сообщения, хотя он показывался на экране.

И мне не нужно было отправлять sendAction: to: forEvent.

Иордания, спасибо вам за помощь.

+0

lol - см., Это помогает, если вы публикуете весь код, а не фрагменты. Трудно сказать, что происходит. Рад, что ты это понял. – Jordan

0

Вы пытались внедрить

- (void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event 

вместо этого? Хороший пример находится здесь:

Can I override the UIControlEventTouchUpInside for a UISegmentedControl?

+0

Спасибо за эту ссылку. К сожалению, переход к супер не сработал. sendAction: to: forEvent получил вызов, но все равно сбой. – RyanJM

+0

Тогда у вас есть еще одна проблема. Поместите журнал сбоев, по крайней мере, и код с помощью sendAction и настройте. – Jordan

+0

Я разместил дополнительную информацию, надеюсь, это поможет. В журнале сбоев вы имеете в виду журнал разработки? – RyanJM

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