Моя проблема была надмножеством этой проблемы - у меня есть 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];
Для целей данного руководства мы заботимся только о TouchDown и 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 (обратите внимание, что табличное представление находится в 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 (такой же, как указано выше, заключенный в VC):
- (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;
}
Я бы хотел услышать более элегантное решение, но оно определенно выполняет свою работу. При использовании ползунка таблица и виды прокрутки остаются неподвижными, а когда вы щелкаете за пределами ползунков, вид таблицы и прокрутки перемещаются, как ожидалось. Также обратите внимание, что в этом решении я могу использовать экземпляры всех трех компонентов, не относящиеся к подклассам. Надеюсь, это кому-нибудь поможет!