Подкласс UIControl не может взять цель? - PullRequest
4 голосов
/ 22 октября 2010

У меня есть подклассы 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

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

debugger picture

Ответы [ 2 ]

0 голосов
/ 22 октября 2010

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

И в итоге я не нуждался в sendAction: to: forEvent.

Джордан, спасибо тебе за помощь.

0 голосов
/ 22 октября 2010

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

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

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

Могу ли я переопределить UIControlEventTouchUpInside для UISegmentedControl?

...