Skip to content

Commit

Permalink
Merge pull request akiroom#16 from akiroom/features/kvo-selected
Browse files Browse the repository at this point in the history
The KVO is available for "selected.+" properties
  • Loading branch information
Hiroki Akiyama committed Jul 31, 2014
2 parents e311f1e + 56bc85f commit db733a0
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 8 deletions.
2 changes: 1 addition & 1 deletion AXStretchableHeaderTabViewController.podspec
Original file line number Diff line number Diff line change
@@ -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
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
33 changes: 26 additions & 7 deletions Classes/AXStretchableHeaderTabViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@

#import "AXStretchableHeaderTabViewController.h"

static NSString * const AXStretchableHeaderTabViewControllerSelectedIndexKey = @"selectedIndex";

@interface AXStretchableHeaderTabViewController ()

@end
Expand Down Expand Up @@ -82,7 +84,7 @@ - (void)setSelectedViewController:(UIViewController *)selectedViewController
return;
}
if (newIndex != _selectedIndex) {
_selectedIndex = newIndex;
[self changeSelectedIndex:newIndex];
}
}

Expand Down Expand Up @@ -132,7 +134,9 @@ - (void)setViewControllers:(NSArray *)viewControllers

// tab bar
[_tabBar setSelectedItem:[_tabBar.items firstObject]];
_selectedIndex = 0;
if (_selectedIndex != 0) {
[self changeSelectedIndex:0];
}
}
}

Expand Down Expand Up @@ -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];
}
}
}

Expand All @@ -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
Expand All @@ -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

0 comments on commit db733a0

Please sign in to comment.