2016-06-09 4 views
0

Ich habe uitextfield und Picker-Ansicht als Eingabeansicht hinzugefügt.show uipickerview nach einiger Verzögerung

alles funktioniert perfekt. Mein Problem ist, sobald ich auf uitextfield-Picker-Ansicht mit Werten erscheint. aber ich erhalte einige Daten von der Datenbank, die für einen anderen Textkasten abhängig von gewähltem Auswahlwert aktualisiert werden.

Es gibt 5-6 Sekunden Zeitintervall bis ich Daten von der DB bekomme. Die Picker-Ansicht ist jedoch bei vorab geladenen Werten sichtbar, bevor die Aufrufe mit den Daten zurückkehren.

Ich möchte nur eine Art Verzögerung hinzufügen, bis ich Daten von DB Picker Wert sollte nicht sichtbar sein ... Hinweis: Ich habe bereits versteckt verwendet. Funktioniert nicht richtig.

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 // 
    } 

ich hinzugefügt Verzögerung/versteckt (Tastatur sowie Pickerview), aber immer noch Tastatur erscheint. und nach Verzögerungen erscheint die Picker-Ansicht-Option.

Ich möchte nicht, dass etwas angezeigt wird, und sobald ich die Datenauswahlansicht anzeigen lasse.

+0

Anstatt zu verzögern, warum zeigen Sie nicht ein Spinner und zeigen dann den Picker mit richtigen Werten an? –

+0

nein Ich brauche Daten als ... abhängig von Picker Ansicht Option Werte, Daten erhalten am 2. Textfeld modifizieren. Es ist wie ich bereits Picker View-Werte, aber abhängig von der Benutzerauswahl muss ich andere Werte ändern, die dort in der DB als nicht behoben sind. so ist es passiert, meine Picker-Ansicht erscheint 1. vor meinem Aufruf an db und ich bekomme Daten. – user2813740

+0

Wie holen Sie Ihre Daten? –

Antwort

1

Sie sollten wahrscheinlich die UITextField Delegatmethode textFieldShouldBeginEditing und Rück FALSE für das Textfeld implementieren, die Netzwerkdaten, um den Picker zu füllen muss. Sie könnten eine Fortschrittsanzeige oben im Fenster anzeigen, wie von Teja vorgeschlagen, und dann den Fortschritt "Spinner" verdecken und becomeFirstResponder auf dem Textfeld aufrufen, um es zu aktivieren, sobald der Download abgeschlossen ist.

+0

ich bereits implementiert. ... alle Delegierten..mein Code funktioniert einwandfrei. Ich kann FALSE nicht zurückgeben. Ansonsten wird die Auswahl nicht angezeigt. Ich möchte keine Daten für die Pick-Ansicht-Option. Die Daten der Picker-Ansicht sind festgelegt und ich lade bereits. Mein Problem ist nur auf TextFieldShouldBeginEditing Delegat, ich rufe DB. gleichzeitig erscheint auch die Picker-Ansicht mit Option. Ich will nur, dass es verzögert ... so dass ich Daten und Picker-Ansicht zur gleichen Zeit haben werde ....... Bitte beachten Sie, dass die Daten von DB anders sind. keine Daten der Picker-Ansicht. ich habe zwei textfields .... eins für Auswahlansicht und ein anderes für Daten hängen vom 1. Textfeld ab. – user2813740