|
@@ -29,6 +29,7 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
forKeyPath:@"managedViewControllers"
|
|
|
options:NSKeyValueObservingOptionNew
|
|
|
context:kXCComEntryTabPageViewControllerKVOKey];
|
|
|
+ [self view];
|
|
|
return self;
|
|
|
}
|
|
|
|
|
@@ -42,15 +43,15 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
- (XCBCCategorySelectView *)categorySelectView {
|
|
|
if (!_categorySelectView) {
|
|
|
_categorySelectView = [XCBCCategorySelectView new];
|
|
|
- XC_WEAKIFY_SELF;
|
|
|
+ __weak typeof(self) weakSelf = self;
|
|
|
_categorySelectView.categoryClickedBlock = ^(NSInteger newIndex) {
|
|
|
- XC_STRONG_SELF;
|
|
|
- [self.categorySelectView animateChangingBlock:^(CGFloat value) {
|
|
|
- self.categorySelectView.selectedIndex = value;
|
|
|
+ typeof(self) self = weakSelf;
|
|
|
+ [UIView animateWithDuration:0.38 animations:^{
|
|
|
+ self.categorySelectView.selectedIndex = newIndex;
|
|
|
CGPoint offset = self.scrollView.contentOffset;
|
|
|
- offset.x = self.scrollView.frame.size.width * value;
|
|
|
+ offset.x = self.scrollView.frame.size.width * newIndex;
|
|
|
self.scrollView.contentOffset = offset;
|
|
|
- } from:self.categorySelectView.selectedIndex to:newIndex forTime:0.38];
|
|
|
+ }];
|
|
|
};
|
|
|
}
|
|
|
return _categorySelectView;
|
|
@@ -100,17 +101,26 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
|
|
|
- (void)viewDidLoad {
|
|
|
[self configureSubviews];
|
|
|
- dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
- [super viewDidLoad]; // prepare for treelang
|
|
|
- });
|
|
|
+ [super viewDidLoad];
|
|
|
+}
|
|
|
+
|
|
|
+static UIViewController *_Nullable findViewController(UIView *view) {
|
|
|
+ if ([view.nextResponder isKindOfClass:UIViewController.class]) {
|
|
|
+ return (UIViewController *)view.nextResponder;
|
|
|
+ }
|
|
|
+ UIView *superView = view.superview;
|
|
|
+ if (!superView) {
|
|
|
+ return nil;
|
|
|
+ }
|
|
|
+ return findViewController(superView);
|
|
|
}
|
|
|
|
|
|
- (void)configureScrollContents {
|
|
|
for (UIView *view in self.stackView.arrangedSubviews) {
|
|
|
[self.stackView removeArrangedSubview:view];
|
|
|
- [view.viewController willMoveToParentViewController:nil];
|
|
|
+ [findViewController(view) willMoveToParentViewController:nil];
|
|
|
[view removeFromSuperview];
|
|
|
- [view.viewController removeFromParentViewController];
|
|
|
+ [findViewController(view) removeFromParentViewController];
|
|
|
}
|
|
|
for (UIViewController *controller in self.managedViewControllers) {
|
|
|
[controller willMoveToParentViewController:self];
|
|
@@ -134,11 +144,13 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
[titles addObject:controller.title];
|
|
|
}
|
|
|
self.categorySelectView.categoryNames = titles;
|
|
|
- self.categorySelectView.selectedIndex = self.defaultSelectionIndex;
|
|
|
- [self configureScrollContents];
|
|
|
- CGPoint offset = self.scrollView.contentOffset;
|
|
|
- offset.x = self.scrollView.frame.size.width * self.categorySelectView.selectedIndex;
|
|
|
- self.scrollView.contentOffset = offset;
|
|
|
+ dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
+ self.categorySelectView.selectedIndex = self.defaultSelectionIndex;
|
|
|
+ [self configureScrollContents];
|
|
|
+ CGPoint offset = self.scrollView.contentOffset;
|
|
|
+ offset.x = self.scrollView.frame.size.width * self.categorySelectView.selectedIndex;
|
|
|
+ self.scrollView.contentOffset = offset;
|
|
|
+ });
|
|
|
} else {
|
|
|
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
|
|
|
}
|
|
@@ -167,8 +179,6 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
context:kXCComEntryTabPageViewControllerKVOKey];
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
@end
|
|
|
|
|
|
@interface XCBCMultiTabPageViewController (Scrolling)
|
|
@@ -203,7 +213,9 @@ static char kXCComEntryTabPageViewControllerKVOKey[] = "kXCComEntryTabPageViewCo
|
|
|
userInfo:nil];
|
|
|
}
|
|
|
}
|
|
|
- controller.managedViewControllers = arg;
|
|
|
+ dispatch_async(dispatch_get_main_queue(), ^{
|
|
|
+ controller.managedViewControllers = arg;
|
|
|
+ });
|
|
|
return controller;
|
|
|
}
|
|
|
|