redribben

accordian view

Jan 13th, 2015
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //
  2. //  AR_ViewController.m
  3. //  AccordianView
  4. //
  5. //
  6.  
  7. #import "AR_ViewController.h"
  8. #define Yvalueinitial 0
  9. @interface AR_ViewController ()
  10. @property (weak, nonatomic) IBOutlet UIScrollView *scrollViewForAccordian;
  11.  
  12. @property (nonatomic) BOOL isExpanded;
  13. @property (nonatomic) NSUInteger tagOfViewExpanded;
  14.  
  15. @end
  16.  
  17. @implementation AR_ViewController
  18. @synthesize scrollViewForAccordian;
  19. @synthesize isExpanded;
  20. @synthesize tagOfViewExpanded;
  21.  
  22. - (void)viewDidLoad
  23. {
  24.     [super viewDidLoad];
  25.     // Do any additional setup after loading the view, typically from a nib.
  26.     [self settingDifferentDevices];
  27.    
  28.     [self setTableOuter:17];
  29. }
  30.  
  31. - (void)didReceiveMemoryWarning
  32. {
  33.     [super didReceiveMemoryWarning];
  34.     // Dispose of any resources that can be recreated.
  35. }
  36. -(void) settingDifferentDevices
  37. {
  38.     CGRect screenBounds = [[UIScreen mainScreen] bounds];
  39.    
  40.     if (screenBounds.size.height == 480)
  41.     {
  42.         NSLog(@"its 3.5 inch");
  43.         scrollViewForAccordian.frame  = CGRectMake(scrollViewForAccordian.frame.origin.x, scrollViewForAccordian.frame.origin.y, scrollViewForAccordian.frame.size.width, scrollViewForAccordian.frame.size.height-88);
  44.        
  45.     }
  46.     else
  47.     {
  48.         NSLog(@"its 4 inch");
  49.        
  50.        
  51.     }
  52. }
  53. -(void)setTableOuter:(NSUInteger)noOfOuterRows
  54. {
  55.     int yValue=Yvalueinitial;
  56.     for (UIView *views in scrollViewForAccordian.subviews)
  57.     {
  58.         [views removeFromSuperview];
  59.     }
  60.     for (int i=1 ; i<= noOfOuterRows; i++)
  61.     {
  62.         //Making the Cell
  63.         UIView *viewForOutertable = [[UIView alloc]initWithFrame:CGRectMake(0, yValue, 320, 44)];
  64.         viewForOutertable.tag = i;
  65.        
  66.         //Labeling each cell
  67.         UILabel *labelOnOuter = [[UILabel alloc]initWithFrame:CGRectMake(60, 7, 250, 30)];
  68.         labelOnOuter.text = [NSString stringWithFormat:@"Process no: %i", i];
  69.         labelOnOuter.textColor = [UIColor whiteColor];
  70.        
  71.         //Setting the buttons
  72.         UIButton *buttonToEnlarge = [[UIButton alloc]initWithFrame:CGRectMake(20, 7, 30 , 30)];
  73.         buttonToEnlarge.tag = i;
  74.         [buttonToEnlarge setImage:[UIImage imageNamed:@"open.png"]
  75.                          forState:UIControlStateNormal];
  76.        
  77.         [buttonToEnlarge setImage:[UIImage imageNamed:@"close.png"]
  78.                          forState:UIControlStateSelected];
  79.         [buttonToEnlarge addTarget:self
  80.                             action:@selector(expandButtonTapped:)
  81.                   forControlEvents: UIControlEventTouchUpInside];
  82.        
  83.        
  84.         UIImageView *imageViewFOrOuterTable = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
  85.         imageViewFOrOuterTable.image = [UIImage imageNamed:@"ltgrey.jpg"];
  86.        
  87.         [viewForOutertable addSubview:imageViewFOrOuterTable];
  88.         [viewForOutertable addSubview:labelOnOuter];
  89.         [viewForOutertable addSubview:buttonToEnlarge];
  90.         [scrollViewForAccordian addSubview:viewForOutertable];
  91.         yValue = yValue+viewForOutertable.frame.size.height;
  92.     }
  93.     [scrollViewForAccordian setContentSize:CGSizeMake(320, yValue)];
  94. }
  95.  
  96.  
  97.  
  98. -(void)setTableInner:(NSUInteger)noOfInnerRows forTag:(NSUInteger)tagForView
  99. {
  100.     float yValue=Yvalueinitial, yValueForSubviews;
  101.     tagOfViewExpanded = tagForView;
  102.     UIView *viewBelowWhichItStarts;
  103.     NSMutableArray *subviewsArray = [scrollViewForAccordian.subviews mutableCopy];
  104.     NSSortDescriptor *aSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"tag" ascending:YES];
  105.     [subviewsArray sortUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]];
  106.    
  107.     for (UIView * subviews in subviewsArray)
  108.     {
  109.         if (subviews.tag == 0 )
  110.         {
  111.             [subviews removeFromSuperview];
  112.         }
  113.         if (subviews.tag ==tagForView )
  114.         {
  115.             viewBelowWhichItStarts = subviews;
  116.             yValueForSubviews=viewBelowWhichItStarts.frame.origin.y+viewBelowWhichItStarts.frame.size.height;
  117.         }
  118.     }
  119.     yValue = viewBelowWhichItStarts.frame.origin.y+44;
  120.     for (int i=0 ; i< noOfInnerRows; i++)
  121.     {
  122.         UIView *viewForInnerTable = [[UIView alloc]initWithFrame:CGRectMake(0, yValue, 320, 44)];
  123.         viewForInnerTable.backgroundColor = [UIColor redColor];
  124.         yValue = yValue+viewForInnerTable.frame.size.height;
  125.         UIImageView *imageViewForInnerTable = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 44)];
  126.         imageViewForInnerTable.image = [UIImage imageNamed:@"light_gray_bar_with_blue_stripe.png"];
  127.         [viewForInnerTable addSubview:imageViewForInnerTable];
  128.        
  129.         UILabel *labelForInner = [[UILabel alloc]initWithFrame:CGRectMake(50, 7, 200, 30)];
  130.         float i = arc4random_uniform(8);
  131.         labelForInner.text= [NSString stringWithFormat:@"subProcess: %i", (int)i];
  132.         [viewForInnerTable addSubview:labelForInner];
  133.         [scrollViewForAccordian addSubview:viewForInnerTable];
  134.     }
  135.     yValueForSubviews = yValue;
  136.     for (UIView * subviews in subviewsArray)
  137.     {
  138.         if (subviews.tag > tagForView)
  139.         {
  140.             [scrollViewForAccordian bringSubviewToFront:subviews];
  141.             [UIView beginAnimations:nil context:NULL];
  142.             [UIView setAnimationDuration:0.3];
  143.             subviews.frame = CGRectMake(0, yValueForSubviews, 320, viewBelowWhichItStarts.frame.size.height);
  144.             [UIView commitAnimations];
  145.            
  146.            
  147.             yValueForSubviews = yValueForSubviews + viewBelowWhichItStarts.frame.size.height;
  148.         }
  149.     }
  150.     [scrollViewForAccordian setContentSize:CGSizeMake(320, yValueForSubviews+2)];
  151. }
  152.  
  153.  
  154. -(void)expandButtonTapped:(UIButton *)sender
  155. {
  156.     for (UIView *outerViews in scrollViewForAccordian.subviews)
  157.     {
  158.         if (outerViews.tag >0)
  159.         {
  160.             for (UIView *subviews in outerViews.subviews)
  161.             {
  162.                 if ([subviews isMemberOfClass:[UIButton class]])
  163.                 {
  164.                     ((UIButton *)subviews).selected = NO;
  165.                 }
  166.                 if ([subviews isMemberOfClass:[UIImageView class]])
  167.                 {
  168.                     ((UIImageView *)subviews).image = [UIImage imageNamed:@"ltgrey.jpg"];
  169.                     if (outerViews.tag == sender.tag && !sender.selected)
  170.                     {
  171.                         ((UIImageView *)subviews).image = [UIImage imageNamed:@"grey.jpg"];
  172.                     }
  173.                 }
  174.             }
  175.         }
  176.     }
  177.     if (!isExpanded) // when NO process tree is already expanded
  178.     {
  179.         isExpanded = YES;
  180.         sender.selected = YES;
  181.         [self setTableInner:sender.tag forTag:sender.tag];
  182.     }
  183.     else // when the process tree is already expanded
  184.     {
  185.         isExpanded =NO;
  186.         if (sender.tag == tagOfViewExpanded)
  187.         {
  188.             sender.selected = NO;
  189.             [self bringUpViews:tagOfViewExpanded];
  190.         }
  191.         else
  192.         {
  193.             sender.selected = YES;
  194.             [self bringUpViews:tagOfViewExpanded];
  195.             [self setTableInner:sender.tag forTag:sender.tag];
  196.             isExpanded = YES;
  197.         }
  198.        
  199.     }
  200. }
  201.  
  202. -(void)bringUpViews:(NSUInteger)tagForView
  203. {
  204.     UIView *viewBelowWhichItStarts;
  205.     float yValueForSubviews;
  206.     for (UIView * subviews in scrollViewForAccordian.subviews)
  207.     {
  208.         if (subviews.tag == tagForView)
  209.         {
  210.             viewBelowWhichItStarts =subviews;
  211.             yValueForSubviews = viewBelowWhichItStarts.frame.origin.y+44;
  212.         }
  213.         if (subviews.tag > tagForView )
  214.         {
  215.             [UIView beginAnimations:nil context:NULL];
  216.             [UIView setAnimationDuration:0.3];
  217.             subviews.frame = CGRectMake(0, yValueForSubviews, 320, viewBelowWhichItStarts.frame.size.height);
  218.             [UIView commitAnimations];
  219.             yValueForSubviews = yValueForSubviews + viewBelowWhichItStarts.frame.size.height;
  220.         }
  221.     }
  222.     [scrollViewForAccordian setContentSize:CGSizeMake(320, yValueForSubviews)];
  223.     yValueForSubviews = viewBelowWhichItStarts.frame.origin.y;
  224.     [scrollViewForAccordian bringSubviewToFront:viewBelowWhichItStarts];
  225.     float yChek = yValueForSubviews;
  226.     // if needed to remove the previosly cretaed views
  227.     for (UIView * subviews in scrollViewForAccordian.subviews)
  228.     {
  229.         if (subviews.tag == 0)
  230.         {
  231.             if ((subviews.frame.origin.y - yChek) == 44)
  232.             {
  233.                 [UIView beginAnimations:nil context:NULL];
  234.                 [UIView setAnimationDuration:0.3];
  235.                 subviews.frame = CGRectMake(0, yValueForSubviews, 320, viewBelowWhichItStarts.frame.size.height);
  236.                 [UIView commitAnimations];
  237.                 yChek +=44;
  238.                
  239.             }
  240.         }
  241.     }
  242. }
  243.  
  244.  
  245. @end
Advertisement
Add Comment
Please, Sign In to add comment