Можно вставить в новой реализации для подруги. Таким образом, новая розетка может быть введена, не перекомпилировав Ваш код.
<bean id="jane" class="foo.bar.HotFemale">
<property name="age" value="19"/>
</bean>
<bean id="mary" class="foo.bar.Female">
<property name="age" value="23"/>
</bean>
<bean id="john" class="foo.bar.Male">
<property name="girlfriend" ref="jane"/>
</bean>
(Вышеупомянутое принимает, Розетка и HotFemale реализуют тот же интерфейс GirlfFriend)
Вероятно, вам следует обработать событие UIControlTouchDown и, в зависимости от того, что вы подразумеваете под «удержанием», запустить NSTimer, который будет считать интервал с момента запуска касания и становятся недействительными при срабатывании или отпускании касания (события UIControlTouchUpInside и UIControlTouchUpOutside ). Когда срабатывает таймер, вы обнаруживаете "касание и удержание".
Вот код поднялся прямо из моего приложения. Вы должны добавить эти методы (и булевой член _canceltous) в класс, который вы получаете из UiableViewCell.
-(void) tapNHoldFired {
self->_cancelTouches = YES;
// DO WHATEVER YOU LIKE HERE!!!
}
-(void) cancelTapNHold {
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(tapNHoldFired) object:nil];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
self->_cancelTouches = NO;
[super touchesBegan:touches withEvent:event];
[self performSelector:@selector(tapNHoldFired) withObject:nil afterDelay:.7];
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
[self cancelTapNHold];
if (self->_cancelTouches)
return;
[super touchesEnded:touches withEvent:event];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
[self cancelTapNHold];
[super touchesMoved:touches withEvent:event];
}
- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
[self cancelTapNHold];
[super touchesCancelled:touches withEvent:event];
}