diff --git a/AXStretchableHeaderTabViewController.podspec b/AXStretchableHeaderTabViewController.podspec index f97c5b4..124eec6 100644 --- a/AXStretchableHeaderTabViewController.podspec +++ b/AXStretchableHeaderTabViewController.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |s| s.name = "AXStretchableHeaderTabViewController" - s.version = "0.1.9" + s.version = "0.2.0" s.summary = "Stretchable header view + Horizontal swipable tab view." s.description = <<-DESC Stretchable header view + Horizontal swipable tab view diff --git a/CHANGELOG.md b/CHANGELOG.md index ecc1e08..553f31f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # AXStretchableHeaderTabViewController CHANGELOG +## 0.2.0 + +Feature: The KVO is available for selectedIndex and selectedViewController properties. + ## 0.1.9 Feature: AXStretchableSubViewControllerViewSource protocol is available to set scroll view. diff --git a/Classes/AXStretchableHeaderTabViewController.m b/Classes/AXStretchableHeaderTabViewController.m index 760f167..2839e9e 100644 --- a/Classes/AXStretchableHeaderTabViewController.m +++ b/Classes/AXStretchableHeaderTabViewController.m @@ -5,6 +5,8 @@ #import "AXStretchableHeaderTabViewController.h" +static NSString * const AXStretchableHeaderTabViewControllerSelectedIndexKey = @"selectedIndex"; + @interface AXStretchableHeaderTabViewController () @end @@ -82,7 +84,7 @@ - (void)setSelectedViewController:(UIViewController *)selectedViewController return; } if (newIndex != _selectedIndex) { - _selectedIndex = newIndex; + [self changeSelectedIndex:newIndex]; } } @@ -132,7 +134,9 @@ - (void)setViewControllers:(NSArray *)viewControllers // tab bar [_tabBar setSelectedItem:[_tabBar.items firstObject]]; - _selectedIndex = 0; + if (_selectedIndex != 0) { + [self changeSelectedIndex:0]; + } } } @@ -285,9 +289,12 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if (scrollView.isDragging) { NSUInteger numberOfViewControllers = _viewControllers.count; - _selectedIndex = round(scrollView.contentOffset.x / scrollView.contentSize.width * numberOfViewControllers); - _selectedIndex = MIN(numberOfViewControllers - 1, MAX(0, _selectedIndex)); - [_tabBar setSelectedItem:_tabBar.items[_selectedIndex]]; + NSInteger newSelectedIndex = round(scrollView.contentOffset.x / scrollView.contentSize.width * numberOfViewControllers); + newSelectedIndex = MIN(numberOfViewControllers - 1, MAX(0, newSelectedIndex)); + if (_selectedIndex != newSelectedIndex) { + [_tabBar setSelectedItem:_tabBar.items[newSelectedIndex]]; + [self changeSelectedIndex:newSelectedIndex]; + } } } @@ -301,8 +308,11 @@ - (BOOL)tabBar:(AXTabBar *)tabBar shouldSelectItem:(UITabBarItem *)item - (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item { - _selectedIndex = [[tabBar items] indexOfObject:item]; - [_containerView setContentOffset:(CGPoint){_selectedIndex * CGRectGetWidth(_containerView.bounds), _containerView.contentOffset.y} animated:YES]; + NSInteger newSelectedIndex = [[tabBar items] indexOfObject:item]; + if (_selectedIndex != newSelectedIndex) { + [_containerView setContentOffset:(CGPoint){newSelectedIndex * CGRectGetWidth(_containerView.bounds), _containerView.contentOffset.y} animated:YES]; + [self changeSelectedIndex:newSelectedIndex]; + } } #pragma mark - Private Method @@ -318,4 +328,13 @@ - (UIScrollView *)scrollViewWithSubViewController:(UIViewController *)viewContro } } +- (void)changeSelectedIndex:(NSInteger)selectedIndex +{ + [self willChangeValueForKey:@"selectedIndex"]; + [self willChangeValueForKey:@"selectedViewController"]; + _selectedIndex = selectedIndex; + [self didChangeValueForKey:@"selectedIndex"]; + [self didChangeValueForKey:@"selectedViewController"]; +} + @end