2011-06-07 9 views
7

Chcę wyświetlić UIPickerView po naciśnięciu przycisku (podobnie jak klawiatura), a następnie odejść, gdy użytkownik dotknie dowolnego miejsca na ekranie. Jak mogę to zrobić? Dzięki.Jak mogę wyświetlić widok selektora, tak jak robi to klawiatura?

Nieco więcej tła: Mam UITextField nazywane miesiące w UITableViewCell. Teraz najlepszą opcją jest umieszczenie tam UIPikcerView i łatwiej będzie użytkownikowi wybrać miesiąc niż go wypisać (i to jest lepszy sposób). Ale UIPickerView wygląda naprawdę paskudnie na UITableViewCell, nie wspominając już o tym, że nie mogę zmienić jego gigantycznych rozmiarów. Co powinienem zrobić w tym przypadku?

+0

Twój tytuł nie jest zbyt opisowy. Podaj więcej szczegółów na temat tego, co próbujesz osiągnąć (w tytule). – Julian

+0

Przepraszam za to. Tytuł został zaktualizowany przez kogoś innego, ale teraz dostarczyłem więcej informacji na ten temat. – sumderungHAY

Odpowiedz

13

W ten sposób powinieneś użyć UIPickerView dla textField w UITableView.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease]; 
    cell.selectionStyle= UITableViewCellSelectionStyleNone; 
    UITextField *textField = [[UITextField alloc]initWithFrame:CGRectMake(110, 10, 185, 30)]; 
    textField.clearsOnBeginEditing = NO; 
    textField.textAlignment = UITextAlignmentRight; 
    textField.delegate = self; 
    [cell.contentView addSubview:textField]; 
    //textField.returnKeyType = UIReturnKeyDone; 
    cell.textLabel.backgroundColor = [UIColor clearColor]; 
    cell.detailTextLabel.backgroundColor = [UIColor clearColor]; 

     // if you want a UIPickerView for first row... then do the following // 
     // Here.. packSizePickerView is an object of UIPickerView 

    if (indexPath.row == 1) 
    { 
    textField.tag=0; 
    textField.delegate= self; 
    packSizePickerView.delegate = self; 
    packSizePickerView = [[UIPickerView alloc] init]; 
    packSizePickerView.autoresizingMask=UIViewAutoresizingFlexibleWidth; 
    packSizePickerView.showsSelectionIndicator=YES; 
    textField.inputView = packSizePickerView; 
    } 

    // if you want to select date/months in row 2, go for UIDatePickerView // 

    if (indexPath.row == 1) 
    { 
     textField.tag = 1; 
     UIDatePicker *datePicker = [[UIDatePicker alloc] init]; 
     datePicker.datePickerMode = UIDatePickerModeDate; 
     [datePicker addTarget:self action:@selector(datePickerValueChangedd:) forControlEvents:UIControlEventValueChanged]; 
     datePicker.tag = indexPath.row; 
     textField.delegate= self; 
     textField.inputView = datePicker; 
     [datePicker release]; 

    } 

} 

// Configure the cell... 

NSInteger row = [indexPath row]; 
cell.textLabel.text = [myArray objectAtIndex:row]; 

return cell; 

}

I datePickerValueChangedd

- (void)datePickerValueChangedd:(UIDatePicker*) datePicker{ 
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 50, 68, 68)]; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
df.dateStyle = NSDateFormatterMediumStyle; 
label.text = [NSString stringWithFormat:@"%@",[df stringFromDate:datePicker.date]]; 

    NSLog(@"I am inside the datePickerValueChanged - - %@", label.text); 
[df release]; 
    globalValue1 = label.text; 

    // use a global variable to copy the value from the pickerView. // 
    }  

Teraz w textFieldDidEndEditing:

-(void) textFieldDidEndEditing:(UITextField *)textField { 
if (textField.tag ==0) 
    [textField setText: globalValue0]; 

if (textField.tag ==1) 
    [textField setText: globalValue1]; 

} 

I do dymisji UIDatePicker ustawić UIView jako UIControl i

resignFirstResponder 
+0

Świetna odpowiedź !! Właśnie tego szukałem !! +1 – Garoal

0

Myślę, że musisz umieścić swój UIPickerView "na zewnątrz" na widocznym ekranie i animować go po naciśnięciu przycisku. Nie jestem do końca pewien, jaki byłby najlepszy sposób na pozbycie się tego, ale prawdopodobnie mógłbyś usłyszeć dotknięcie na widoku rodzica, gdy selektor jest widoczny, a następnie animować go z powrotem.

Powiązane problemy