Моя проблема была надстройкой этого вопроса - у меня UISliders внутри UITableViewCells и вся UITableView это страница внутри UIScrollView. Ползунки разрушали взаимодействие с другими двумя, и подклассические решения не работали. Вот что я придумал, это отлично работает: отправлять уведомления, когда ползунки перемещаются, и в это время активируются UITableView и UIScrollView disableScrolling. Обратите внимание на приведенный ниже рисунок: мои ползунки горизонтальны, мой планшет вертикален, а мой UIScrollView имеет горизонтальные страницы.

UITableViewCell поднимает события для программно созданного ползунка:
self.numberSlider = [[UISlider alloc] init];
[self.numberSlider addTarget:self action:@selector(sliderValueChanged:) forControlEvents:UIControlEventValueChanged];
[self.numberSlider addTarget:self action:@selector(sliderTouchDown:) forControlEvents:UIControlEventTouchDown];
[self.numberSlider addTarget:self action:@selector(sliderTouchUp:) forControlEvents:UIControlEventTouchUpInside];
[self.numberSlider addTarget:self action:@selector(sliderTouchUp:) forControlEvents:UIControlEventTouchUpOutside];
Для целей данного руководства, мы заботимся только о приземлении и Up:
- (void)sliderTouchDown:(UISlider *)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
}
- (void)sliderTouchUp:(UISlider *)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
Теперь мы обнаруживаем в этих уведомлениях как UITableView (обратите внимание, что tableview находится в VC, но я уверен, что это сработает, если вы подключились оценочный):
- (void)viewDidLoad
{
// other stuff
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sliderTouchDown:) name:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sliderTouchUp:) name:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
- (void)sliderTouchDown:(NSNotification *)notify
{
self.treatmentTableView.scrollEnabled = NO;
}
- (void)sliderTouchUp:(NSNotification *)notify
{
self.treatmentTableView.scrollEnabled = YES;
}
и UIScrollView (такой же, как указано выше, заключенный в ВК):
- (void)viewDidLoad
{
// other stuff
// Register for slider notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disableScrolling:) name:NOTIFY_SLIDER_TOUCH_BEGAN object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enableScrolling:) name:NOTIFY_SLIDER_TOUCH_ENDED object:nil];
}
- (void)disableScrolling:(NSNotification *)notify
{
self.scrollView.scrollEnabled = NO;
}
- (void)enableScrolling:(NSNotification *)notify
{
self.scrollView.scrollEnabled = YES;
}
Я хотел бы услышать более элегантное решение, но это один определенно выполняет свою работу , Когда вы используете слайдер, таблица и scrollviews остаются неподвижными, и когда вы нажимаете за пределы ползунков, таблицы и прокрутки просматриваются как ожидалось. Также - обратите внимание, что я мог бы использовать не-подклассы экземпляров всех трех компонентов в этом решении. Надеюсь, это поможет кому-то!
Спасибо, в конечном итоге с этим. Однако, еще одна странность ... это поведение проявлялось только на симуляторе. Как только я получил его на устройстве, он отлично работал без исправления. – MarkPowell
Интересно, еще одна причина не полагаться только на симулятор для тестирования ... – BoltClock
FWIW, я вижу точно такое же поведение (как описано в исходном вопросе) как на симуляторе (iOS 6), так и на устройстве (iOS 5.1). Я должен нажать и удерживать минутку, прежде чем перетаскивать слайдер, иначе я получаю вместо этого прокрутку. –