У меня есть подклассы UIControl, и в нем я отправляю:
[self sendActionsForControlEvents:UIControlEventValueChanged];
Когда я создаю экземпляр объекта, я добавляю цель следующим образом:
[starView addTarget:self action:@selector(starRatingChanged:) forControlEvents:UIControlEventValueChanged];
Представление отображается нормально, и без цели функциональность работает хорошо. Но при добавлении цели вылетает. Есть идеи, почему?
Мой класс объявлен с помощью:
@interface RMStarRating : UIControl {...}
Что бы это ни стоило, я настроил свое представление в - (void)layoutSubviews
. Есть ли другой метод, который мне нужен для подкласса, чтобы цели были сохранены правильно или чтобы цели были отправлены с правильными действиями? Я думал, что UIControl позаботится о сохранении целей и действий для вас.
ОБНОВЛЕНИЕ: попытка предоставить больше информации
Я настроил объект следующим образом:
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
Отладчик имеет: