2016-06-09 117 views
0

我有uitextfield并添加了选择器视图作为输入视图。延迟一段时间后显示uipickerview

一切工作完美。我的问题是一旦我点击uitextfield选择器视图出现值。但我从数据库中获取一些数据,这些数据将根据所选择的选取器值而更新为另一个文本框。

从我从数据库获取数据时,有5-6秒的时间间隔。但在使用数据返回调用之前,拾取器视图可以使用预加载的值显示。

我只是想添加一种延迟,直到我从数据库中选取数据的值不应该是可见的... 注:我已经使用隐藏。不能正常工作。

UIPickerView *vwlistPicker = [[UIPickerView alloc] init]; 
[vwlistPicker sizeToFit]; 
vwlistPicker.delegate = self; 
vwlistPicker.dataSource = self; 
vwlistPicker.showsSelectionIndicator = YES; 

UITextField *txtPayType = [[UITextField alloc] initWithFrame:CGRectMake(0, 65, 250, 30)]; 
txtPayType.layer.borderWidth = 0.5; 
txtPayType.layer.masksToBounds = true; 
txtPayType.layer.cornerRadius = 5; 
txtPayType.layer.borderColor = [[UIColor blackColor] CGColor]; 
txtPayType.layer.sublayerTransform = CATransform3DMakeTranslation(5, 0, 0); 
txtPayType.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; 
txtPayType.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
txtPayType.tag = 1; 
[txtPayType setDelegate:self]; 
txtPayType.text = [tempDic valueForKey:@"PayType"]; 
[txtPayType setFont:[UIFont fontWithName:@"Avenir-Medium" size:15.0]]; 
[txtPayType setTextColor:[UIColor colorWithRed:19.0/255.0 green:62.0/255.0 blue:137.0/255.0 alpha:1]]; 
[txtPayType setReturnKeyType:UIReturnKeyDone]; 
txtPayType.inputView = vwlistPicker; 

UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init]; 
keyboardDoneButtonView.barStyle = UIBarStyleDefault; 
keyboardDoneButtonView.translucent = NO; 
keyboardDoneButtonView.barTintColor = [UIColor colorWithRed:10.0/255.0 green:23.0/255.0 blue:75.0/255.0 alpha:0]; 

[keyboardDoneButtonView sizeToFit]; 

UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done" 
                   style:UIBarButtonItemStylePlain target:self 
                   action:@selector(itemPickerDoneClicked:)] autorelease]; 

UIBarButtonItem* cancelButton = [[[UIBarButtonItem alloc] initWithTitle:@"Cancel" 
                    style:UIBarButtonItemStylePlain target:self 
                   action:@selector(itemPickerCancelClicked:)] autorelease]; 


[keyboardDoneButtonView setItems:[NSArray arrayWithObjects:doneButton,cancelButton, nil]]; 

txtPayType.inputAccessoryView = keyboardDoneButtonView; 

[self.view addSubview:txtPayType]; 

//Textfield delegate 

    -(BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
    { 
     if(textField.tag == 1) 
     { 
      [vwlistPicker setHidden:TRUE]; 
      double delayInSeconds = 5; 
      dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
      dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
       [vwlistPicker reloadInputViews]; 
       textField.inputView = vwlistPicker; 
       [vwlistPicker reloadAllComponents]; 
       [vwlistPicker setHidden:FALSE]; 
      }); 
// Call to DB and get Data // 
    } 

我添加了延迟/隐藏(键盘以及pickerview),但仍出现键盘。并延迟选择器视图选项出现后。

我不希望显示任何内容,一旦我得到数据选取器视图出现。

+0

而不是延迟你为什么不显示一个微调,然后显示正确的值选择器? –

+0

不,我需要数据...取决于选择器视图选项值,数据获取修改第二个文本框。它就像我已经有选择器视图值,但取决于用户选择我需要改变其他值在数据库中不固定。所以它发生我的选择器视图出现之前,我打电话给db和我得到的数据。 – user2813740

+0

你如何获取你的数据? –

回答

1

您应该实现UITextField委托方法textFieldShouldBeginEditing并返回FALSE以获取需要网络数据以便填充选取器的文本字段。您可以在Teja建议的窗口顶部显示一个进度指示器,然后隐藏进度“微调器”,并在文本字段上调用becomeFirstResponder,使其在下载完成后启用编辑。

+0

我已经实施。 ...所有代表......我的代码工作得很好。我不能返回FALSE。否则选择器视图将不会出现。我不希望选择器视图选项的数据。选择器视图数据是固定的,我已经加载。我的问题是只在textFieldShouldBeginEditing委托,我打电话给DB。在同一时间选择器视图也出现在选项中。我只是想让它延迟...因此,我将同时拥有数据和选取器视图.......请注意来自数据库的数据是不同的。不是选择器视图数据。我有两个文本框...一个用于选择器视图,另一个用于数据依赖于第一个文本框。 – user2813740