Я использую TTLauncherView
как своего рода домашний экран для своего приложения, и у меня есть только значки на одну страницу.Как я могу сделать так, чтобы TTLauncherView не позволял вам перетаскивать иконки на «следующую страницу»?Я хочу установить максимальное количество страниц (в данном случае - одну).
(РЕДАКТИРОВАТЬ: Короче говоря, я подкласс beginEditing
, см. Ответ ниже. )
Я понимаю, почему он добавляет дополнительную страницу при вызове beginEditing
, но я не хочу редактировать код фреймворка.(Это затрудняет обновление до более новых версий.) Я также предпочел бы не создавать подклассы и не переопределять этот один метод, если мне придется полагаться на то, как он реализован.(Я не против подклассов или добавления категории, если она чистая.)
Я попытался установить scrollView.scrollEnabled
в NO в методе обратного вызова launcherViewDidBeginEditing
в моем TTLauncherViewDelegate
, но это не работает, покаон находится в режиме редактирования, и я не знаю, почему.
Я попытался добавить блокировщик UIView в представление прокрутки для перехвата сенсорных событий, установив userInteractionEnabled=NO
, который работает нормально.Мне все еще нужно как-то отключить перетаскивание TTLauncherItems
на следующую страницу.
Я также пытался установить contentSize
для просмотра прокрутки на bounds
в launcherViewDidBeginEditing
, но это не выгляделоработать либо.
Есть ли лучший способ?
Пытался заблокировать жесты:
- (void)setLauncherViewScrollEnabled:(BOOL)scrollEnabled {
if (scrollEnabled) {
[self.scrollViewTouchInterceptor removeFromSuperview];
self.scrollViewTouchInterceptor = nil;
} else {
// iter through the kids to get the scrollview, put a gesturerecognizer view in front of it
UIScrollView *scrollView = [launcherView scrollViewSubview];
self.scrollViewTouchInterceptor = [UIView viewWithFrame:scrollView.bounds]; // property retains it
UIView *blocker = self.scrollViewTouchInterceptor;
[scrollView addSubview:scrollViewTouchInterceptor];
[scrollView sendSubviewToBack:scrollViewTouchInterceptor];
scrollViewTouchInterceptor.userInteractionEnabled = NO;
}
}
Для справки: TTLauncherView.m :
- (void)beginEditing {
_editing = YES;
_scrollView.delaysContentTouches = YES;
UIView* prompt = [self viewWithTag:kPromptTag];
[prompt removeFromSuperview];
for (NSArray* buttonPage in _buttons) {
for (TTLauncherButton* button in buttonPage) {
button.editing = YES;
[button.closeButton addTarget:self action:@selector(closeButtonTouchedUpInside:)
forControlEvents:UIControlEventTouchUpInside];
}
}
// Add a page at the end
[_pages addObject:[NSMutableArray array]];
[_buttons addObject:[NSMutableArray array]];
[self updateContentSize:_pages.count];
[self wobble];
if ([_delegate respondsToSelector:@selector(launcherViewDidBeginEditing:)]) {
[_delegate launcherViewDidBeginEditing:self];
}
}