私はTTLauncherView
自分のアプリの一種のホーム画面として使用していますが、1ページ分のアイコンしかありません。TTLauncherViewでアイコンを「次のページ」にドラッグできないようにするにはどうすればよいですか?最大ページ数(この場合は1ページ)を設定したい。
(編集: 短い話、私はサブクラス化beginEditing
した、以下の答えを参照してください。)。
が呼び出されたときにページが追加される理由はわかりますがbeginEditing
、フレームワークコードを編集したくありません。(そのため、新しいバージョンに更新するのが難しくなります。)実装方法に依存する必要がある場合は、その1つのメソッドをサブクラス化してオーバーライドしないこともお勧めします。(私は、カテゴリがクリーンであれば、サブクラス化またはカテゴリの追加に反対していません。)
scrollView.scrollEnabled
のコールバックメソッドlauncherViewDidBeginEditing
でNOに設定しようとしまし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];
}
}