2009-05-25 28 views

Trả lời

25

Chỉnh sửa: câu trả lời này là chính xác tại thời điểm viết. Apple đã giới thiệu inputView. Mafonya answer là những gì bạn nên làm ngày nay.

Có thể ngăn bàn phím bật lên. Đặt lớp của bạn làm đại biểu của UITextField: textField.delegate = self và thêm: <UITextFieldDelegate> sau khi khai báo giao diện của bạn (trước {) trong tệp tiêu đề.

Bây giờ thực hiện textFieldShouldBeginEditing::

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    // Show UIPickerView 

    return NO; 
} 

Nếu bạn muốn để có thể che giấu pickerView bạn phương pháp này sẽ không hoạt động. Những gì bạn có thể làm sau đó là tạo ra phân lớp của UITextField và ghi đè lên các bộ chọn *trackingWithTouch:event: và làm phép thuật của bạn trong đó. Bạn có thể vẫn cần trả lại NO từ textFieldShouldBeginEditting: để ngăn bàn phím hiển thị.

+1

giải pháp của bạn hoạt động một phần. Tôi muốn hiển thị xem bộ chọn trên một số uitextfields cụ thể không phải trên tất cả các trường văn bản và cũng khi giá trị được chọn từ giao diện bộ chọn được điền vào trường văn bản mong muốn, chế độ xem bộ chọn phải được ẩn. –

1

Kiểm tra mã tại (có cả TextView + thanh tabbar và pickerview + Mã thanh tabbar)

UITextView and UIPickerView with its own UIToolbar

này sẽ nhận được pickerview phải từ chức vv Tất cả u cần phải làm sau đó là sử dụng pickerview phương thức ủy quyền để cập nhật chế độ xem văn bản

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 

Thay vì sử dụng trường văn bản, hãy sử dụng nhãn UI, với nền trắng. Bằng cách đó, bàn phím sẽ không hiển thị khi bạn nhấn vào nó. ghi đè lên sự kiện chạm trên UILabel, khi điều đó xảy ra, hãy gọi phương thức tạo thành câu hỏi riêng tư sẽ hiển thị chế độ xem mới.

-(void) addToViewWithAnimation:(UIView *) theView 
+0

tôi không muốn bàn phím hiển thị chỉ giao diện người chọn là tôi muốn được hiển thị khi tôi nhập vào trường văn bản –

+0

vâng bàn phím sẽ hiển thị khá nhiều. bạn sẽ phải sử dụng một chế độ xem khác như uiLabel. Tôi đã chỉnh sửa câu trả lời ngắn gọn hơn. – Bluephlame

+0

Như được đề cập ở trên, bàn phím sẽ luôn hiển thị và bạn không thể tránh được.Một lựa chọn khác là thêm chế độ xem bộ chọn ở đầu bàn phím. Họ có cùng chiều cao, vì vậy bàn phím sẽ không được nhìn thấy. – lostInTransit

4

Hey tôi đã dán trong một số mã tôi đã viết một thời gian trở lại để trang trải kịch bản này. Có hai ví dụ một với một actionsheet và một không có một actionsheet:

- (void)textFieldDidBeginEditing:(UITextField *)myTextField{ 

      [myTextField resignFirstResponder]; 

      actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

      [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; 

      CGRect pickerFrame = CGRectMake(0, 40, 0, 0); 

      UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame]; 

       pickerView.showsSelectionIndicator = YES; 

       pickerView.dataSource = self; 

       pickerView.delegate = self; 

       [actionSheet addSubview:pickerView]; 

       [pickerView release]; //NB this may result on the pickerview going black the next time you come back to the textfield, if this is the case just remove this statement 

       UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:NSLocalizedString(@"SUBMIT", @"")]]; 

       closeButton.momentary = YES; 

       closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f); 

       closeButton.segmentedControlStyle = UISegmentedControlStyleBar; 

       closeButton.tintColor = [UIColor blackColor]; 

       [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged]; 

       [actionSheet addSubview:closeButton]; 

       [closeButton release]; 

       [actionSheet showInView:displayedInView]; 

       [actionSheet setBounds:CGRectMake(0, 0, 320, 485)]; 

} 

Đây là mã mà không actionsheet:

- (void)textFieldDidBeginEditing:(UITextField *)myTextField{ 

     [myTextField resignFirstResponder]; 

      for (int component = 0; component &lt; (((NSInteger)numberOfComponentsForPickerView) - 1); component++) { 

       NSInteger valueForRow = [[self.textField.text substringWithRange:NSMakeRange(component,1)] integerValue]; 

       [pickerView selectRow:valueForRow inComponent:component animated:YES]; 

      } 

      [self fadeInPickerView]; 

      [view addSubview:pickerView]; 

      [pickerView release]; 

} 

Một ví dụ chi tiết hơn về điều này có thể được tìm thấy tại địa chỉ: http://www.buggyprogrammer.co.uk/2010/08/18/open-uipickerview-when-user-enters-textfield/

28

Sử dụng [textfield setInputView: pickerView];

Thay thế hệ thống Input Xem
inputView
inputAccessoryView

+7

Đây là câu trả lời đúng cho những ai biết họ đang làm gì. –

+0

Tôi đồng ý, đây là câu trả lời đúng. –

+1

các bạn có biết triển khai nhanh chóng này không? – kareem

4

add inputview để TextField.

picker = [[UIPickerView alloc]init]; 
[picker setDataSource:self]; 
[picker setDelegate:self]; 
[picker setShowsSelectionIndicator:YES]; 

MyTextField.inputView = picker; 
+0

cảm ơn! nó làm việc cho tôi nhưng làm thế nào để ẩn bộ chọn khi chúng tôi đã thực hiện một sự lựa chọn? Cảm ơn rất nhiều –

+0

Đã làm việc cho tôi. Cảm ơn –

Các vấn đề liên quan