2014-05-07 156 views
1

我有一个UIView包含超过20 UIButtons。在点击这些按钮时,我发现一个包含UIPickerView和两个UIButtons('OK','CANCEL')的独特UIView作为其子视图(每个按钮对应于揭示单独和不同的UIVIews)。减少加载UIView的时间延迟

我已经通过IB创建了所有UIViews(其中20个),并将它们全部设置为最初隐藏。所以每当我点击一个按钮,它就会显示一个视图,然后点击'OK'或'CANCEL'再次隐藏视图。

问题是,当这个视图控制器是从另一个推动,需要很长时间来加载(如5秒),我怀疑时间滞后是由于加载所有的子视图之前父UIView出现。

我想减少或取消此时滞。

编辑:

我在viewDidLoad修剪代码。

- (void)viewDidLoad 
{ 
    @try 
    { 
     [super viewDidLoad]; 

     NavigationBarButtonItems *nav=[[NavigationBarButtonItems alloc]init]; 
     self.navigationItem.rightBarButtonItems = [nav BarButtonItems]; 


     //the following properties are only for 'quantity' button and its view whereas the original method contains same properties set for all 20 buttons and its views. 
     _quantityView.layer.cornerRadius=8; 
     _quantityView.clipsToBounds=YES; 
     _quantityButton.layer.cornerRadius=8; 
     _quantityView.hidden=YES; 


     //DEFAULT SELECTED VALUES 
     [email protected]""; 

     //only quantity array is initialised here to populate its pickerview. The actual code contains more than 20 arrays initalised for each picker view 
     NSArray *quantityData=[[NSArray alloc]init]; 
     for(int i=1;i<=100;i++) [quantityData addObject:[NSString stringWithFormat:@"%d",i]]; 

     quantityArray=quantityData; 

     // Do any additional setup after loading the view. 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"Medications-> View did Load-> %@",exception.name); 
    } 
} 

这是一种这样的UIButton( '数量')和UIView( 'QUANTITYVIEW')点击时显示:

- (IBAction)OnClickQuantityButton:(id)sender 
{ 
    @try 
    { 
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.01 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
      [_mainView setNeedsDisplay]; 
      CGPoint centerPoint = CGPointMake(160, _mainScrollView.contentOffset.y+228); 
      _quantityView.center= centerPoint; 
      _quantityView.hidden=NO; 
     }); 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"Medications-> quantity button-> %@",exception.name); 
    } 
} 


- (IBAction)OnClickQuantityOkButton:(id)sender 
{ 
    @try 
    { 
     _quantityLabel.text=selectedQuantity; 
     _quantityView.hidden=YES; 
    } 
    @catch (NSException *exception) 
    { 
     NSLog(@"Medications-> quantity ok button-> %@",exception.name); 
    } 
} 

- (IBAction)OnClickQuantityCancelButton:(id)sender 
{ 
     _quantityView.hidden=YES; 
} 
+1

你能显示一些代码吗?谢谢。 – Ricky

+0

为什么不在需要时创建20个UIView中的每一个。尝试“懒惰实例化”。 – CrimsonChris

+0

@ voyage11检查编辑 – motox

回答

0

简单。

  1. 所有20个UIView的UI具有相同的东西,如Picker视图和2个按钮(OK,Cancel)。

  2. 选择器视图数据源可能不同。

  3. 因此,创建一个UIView将有这些东西,并基于选择器视图将被显示,您可以传递/显示不同的数据。

  4. 也可以通过specifing的

    pickerview.tag =一个枚举常数(20个值)标签值区分20个拾取器。

就是这样。

如果所有20个UIViews包含不同的UI元素作为子视图会怎么样?

  1. 不要使用IB

  2. 在创建视图

  3. 采用延迟加载/创建

  4. 编写自定义功能,它们都将被创建或这将创建&给你的观点(你的20个之一)

  5. 你不会展示所有人。

  6. 根据需要以编程方式创建,以便将它们展示给用户。

+0

如果所有20个UIViews包含不同的UI元素作为它们的子视图怎么办? – motox

+0

你的问题已被回答。看到更新的答案 –