2014-05-07 44 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

你的問題已被回答。看到更新的答案 –