mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
GEEKING
This commit is contained in:
@@ -0,0 +1,170 @@
|
||||
//
|
||||
// ExtendedSegmentedControl.m
|
||||
// RobloxMobile
|
||||
//
|
||||
// Created by Ariel Lichtin on 6/5/14.
|
||||
// Copyright (c) 2014 ROBLOX. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ExtendedSegmentedControl.h"
|
||||
#import <UIKit/UIPopoverController.h>
|
||||
|
||||
#define CELL_SIZE CGSizeMake(320.0f, 44.0f)
|
||||
|
||||
//-----------------------------------------------------------------------------------------------------------------------------
|
||||
@interface ExtendedSegmentedControlCell : UITableViewCell
|
||||
@property (weak, nonatomic) IBOutlet UILabel *title;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *checkImage;
|
||||
@end
|
||||
|
||||
@implementation ExtendedSegmentedControlCell
|
||||
|
||||
@end
|
||||
//-----------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@interface ExtendedSegmentedControl () <UITableViewDelegate, UITableViewDataSource>
|
||||
|
||||
@end
|
||||
|
||||
@implementation ExtendedSegmentedControl
|
||||
{
|
||||
NSMutableArray* _elements;
|
||||
NSInteger _extendedSelectedIndex;
|
||||
|
||||
UIViewController* _tableController;
|
||||
UITableView* _tableView;
|
||||
UIPopoverController* _popOver;
|
||||
}
|
||||
|
||||
- (void)awakeFromNib
|
||||
{
|
||||
[super awakeFromNib];
|
||||
|
||||
_elements = [NSMutableArray array];
|
||||
|
||||
_tableView = [[UITableView alloc] init];
|
||||
_tableView.delegate = self;
|
||||
_tableView.dataSource = self;
|
||||
_tableView.scrollEnabled = NO;
|
||||
_tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
|
||||
[_tableView registerNib:[UINib nibWithNibName:@"ExtendedSegmentedControlCell" bundle:nil] forCellReuseIdentifier:@"ReuseCell"];
|
||||
|
||||
_tableController = [[UIViewController alloc] init];
|
||||
[_tableController.view addSubview:_tableView];
|
||||
}
|
||||
|
||||
-(void) showPopOver
|
||||
{
|
||||
if(!_popOver.isPopoverVisible)
|
||||
{
|
||||
[_tableView reloadData];
|
||||
|
||||
CGRect fromRect = self.bounds;
|
||||
float itemWidth = fromRect.size.width / (float)self.numberOfSegments;
|
||||
fromRect.origin.x = fromRect.size.width - itemWidth;
|
||||
fromRect.size.width = itemWidth;
|
||||
|
||||
CGRect tableRect;
|
||||
tableRect.origin = CGPointZero;
|
||||
tableRect.size = CELL_SIZE;
|
||||
tableRect.size.height *= [_tableView numberOfRowsInSection:0];
|
||||
|
||||
_tableView.frame = tableRect;
|
||||
_tableController.preferredContentSize = tableRect.size;
|
||||
//_tableController.contentSizeForViewInPopover = tableRect.size;
|
||||
|
||||
_popOver = [[UIPopoverController alloc] initWithContentViewController:_tableController];
|
||||
[_popOver presentPopoverFromRect:fromRect inView:self permittedArrowDirections:UIPopoverArrowDirectionUp animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)insertSegmentWithTitle:(NSString *)title atIndex:(NSUInteger)segment animated:(BOOL)animated
|
||||
{
|
||||
[_elements addObject:title];
|
||||
|
||||
if(self.maxVisibleItems > 0 && _elements.count > self.maxVisibleItems)
|
||||
{
|
||||
[self setTitle:NSLocalizedString(@"MoreWord", nil) forSegmentAtIndex:(self.maxVisibleItems - 1)];
|
||||
}
|
||||
else
|
||||
{
|
||||
[super insertSegmentWithTitle:title atIndex:segment animated:animated];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
|
||||
{
|
||||
NSInteger previousSelectedSegmentIndex = [super selectedSegmentIndex];
|
||||
[super touchesEnded:touches withEvent:event];
|
||||
|
||||
if(_elements.count > self.maxVisibleItems && [super selectedSegmentIndex] == self.maxVisibleItems-1)
|
||||
{
|
||||
if(previousSelectedSegmentIndex == [super selectedSegmentIndex])
|
||||
[self showPopOver];
|
||||
else
|
||||
[super setSelectedSegmentIndex:previousSelectedSegmentIndex];
|
||||
}
|
||||
}
|
||||
|
||||
- (NSInteger)selectedSegmentIndex
|
||||
{
|
||||
return _extendedSelectedIndex;
|
||||
}
|
||||
|
||||
- (void)setSelectedSegmentIndex:(NSInteger)selectedSegmentIndex
|
||||
{
|
||||
_extendedSelectedIndex = selectedSegmentIndex;
|
||||
|
||||
if(_elements.count > self.maxVisibleItems && selectedSegmentIndex >= self.maxVisibleItems)
|
||||
{
|
||||
[super setSelectedSegmentIndex:self.maxVisibleItems-1];
|
||||
|
||||
[_tableView reloadData];
|
||||
}
|
||||
else
|
||||
[super setSelectedSegmentIndex:selectedSegmentIndex];
|
||||
}
|
||||
|
||||
- (void)sendActionsForControlEvents:(UIControlEvents)controlEvents
|
||||
{
|
||||
if(controlEvents == UIControlEventValueChanged)
|
||||
{
|
||||
if(_elements.count > self.maxVisibleItems && [super selectedSegmentIndex] == self.maxVisibleItems-1)
|
||||
{
|
||||
[self showPopOver];
|
||||
}
|
||||
else
|
||||
{
|
||||
_extendedSelectedIndex = [super selectedSegmentIndex];
|
||||
}
|
||||
}
|
||||
|
||||
[super sendActionsForControlEvents:controlEvents];
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
return MAX(0, (_elements.count - self.maxVisibleItems));
|
||||
}
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
ExtendedSegmentedControlCell* cell = [tableView dequeueReusableCellWithIdentifier:@"ReuseCell" forIndexPath:indexPath];
|
||||
|
||||
cell.title.text = _elements[self.maxVisibleItems + indexPath.row];
|
||||
cell.checkImage.hidden = (_extendedSelectedIndex - self.maxVisibleItems) != indexPath.row;
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
_extendedSelectedIndex = indexPath.row + self.maxVisibleItems;
|
||||
[super setSelectedSegmentIndex:(self.maxVisibleItems - 1)];
|
||||
|
||||
[self sendActionsForControlEvents:UIControlEventValueChanged];
|
||||
|
||||
[_popOver dismissPopoverAnimated:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user