Добавить кнопки в UIPickerView – Swift 1.2

Я хотел бы добавить два UIButtons в UIPickerView (поверх него). Пожалуйста, взгляните на кнопки « Cancel и « Done на этом изображении:

введите описание изображения здесь

Как мне это сделать?

3 Solutions collect form web for “Добавить кнопки в UIPickerView – Swift 1.2”

Я решил это, ответ в Свифт:

 var pickerView = UIPickerView(frame: CGRectMake(0, 200, view.frame.width, 300)) pickerView.backgroundColor = .whiteColor() pickerView.showsSelectionIndicator = true var toolBar = UIToolbar() toolBar.barStyle = UIBarStyle.Default toolBar.translucent = true toolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1) toolBar.sizeToFit() let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Bordered, target: self, action: "donePicker") let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Bordered, target: self, action: "canclePicker") toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false) toolBar.userInteractionEnabled = true textField.inputView = pickerView textField.inputAccessoryView = toolBar 

Вот как я делаю это в ObjC, чтобы добавить всплывающее окно выбора с кнопками в текстовое поле. Должно быть достаточно простым, чтобы быстро перевести. В основном вы создаете сборщик и назначаете его в text inputView . Затем вы создаете панель инструментов, которую вы назначаете на текст inputAccessoryView который находится поверх inputView когда он появляется.

 self.manufacturerPicker = [[UIPickerView alloc] initWithFrame:CGRectZero]; self.manufacturerPicker.delegate = self; self.manufacturerPicker.dataSource = self; [self.manufacturerPicker setShowsSelectionIndicator:YES]; self.filterByManufacturerTextField.inputView = self.manufacturerPicker; UIToolbar *manufacturerPickerToolbar=[[UIToolbar alloc] init]; manufacturerPickerToolbar.barStyle = UIBarStyleBlack; manufacturerPickerToolbar.translucent = YES; manufacturerPickerToolbar.tintColor = nil; [manufacturerPickerToolbar sizeToFit]; UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleBordered target:self action:@selector(manufacturerPickerDoneClicked:)]; UIBarButtonItem *spacerButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(manufacturerPickerCancelClicked:)]; [manufacturerPickerToolbar setItems:@[cancelButton,spacerButton,doneButton]]; self.filterByManufacturerTextField.inputAccessoryView = manufacturerPickerToolbar; 

Обновлено, когда у вас нет UITextField в качестве начальной точки:

Если вы хотите запустить сборщик из ячейки, как если бы это был сборщик текстовых полей, я считаю, что вы должны заставить свой UITableViewCell реализовать процесс становления первым ответчиком.

Для этого я думаю, что процесс заключается в реализации протокола UIResponder в вашей ячейке.

1) переопределить canBecomeFirstResponder и вернуть YES.

2) переопределить inputView свойства inputView . В этом коде верните свой UIPickerView.

§3) переопределить свойство inputAccessoryView getter. В этом коде верните UIToolbar.

Теперь в вашей ячейке, когда вы выбираете ячейку, сделайте ячейку первой [self becomeFirstResponder]; вызвав [self becomeFirstResponder]; ,

Я думаю, это должно привести к сборщику и панели инструментов. Там может быть больше.

При отмене или выполнении отбросьте его, используя [self resignFirstResponder];

Не делал этого раньше, но я думаю, что это общий процесс.

Вариант 2 (чит):

Иногда обманывать проще. Добавьте скрытый UITextField в конце вашей ячейки или добавьте ширину 0. Установите его inputView и inputAccessoryView в соответствии с первоначальным предложением.

Затем, когда вы выбираете ячейку, просто сделайте UITextField первым ответчиком, используя [self.<your text field property> becomeFirstResponder];

Это должно дать вам тот же результат через заднюю дверь.

См. Мое. У меня есть Collection View и UIPicker, чтобы выбрать фото Folders.

введите описание изображения здесь

 //MARK:- SHOW PHOTO FOLDER BUTTON METHOD @IBAction func photoFolderListButtonClicked(sender: UIButton) { self.navigationItem.setHidesBackButton(true, animated: true) //Making PickerView of Competitors let DEVICE_SCREEN_WIDTH = UIScreen.mainScreen().bounds.size.width photoFolderListPicker.frame = CGRectMake(0.0, 44.0, DEVICE_SCREEN_WIDTH, 260) photoFolderListPicker.dataSource = self photoFolderListPicker.delegate = self photoFolderListPicker.showsSelectionIndicator = true; photoFolderListPicker.backgroundColor = UIColor.whiteColor() let pickerDateToolbar = UIToolbar(frame: CGRectMake(0, 0, DEVICE_SCREEN_WIDTH, 44)) pickerDateToolbar.barStyle = UIBarStyle.Black pickerDateToolbar.barTintColor = UIColor.blackColor() pickerDateToolbar.translucent = true //Cancel button on photoFolderListPicker let barItems = NSMutableArray() let labelCancel = UILabel() labelCancel.text = " Cancel" let titleCancel = UIBarButtonItem(title: labelCancel.text, style: UIBarButtonItemStyle.Plain, target: self, action: Selector("cancelPickerSelectionButtonClicked:")) titleCancel.tintColor = UIColor.whiteColor() barItems.addObject(titleCancel) var flexSpace: UIBarButtonItem flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: self, action: nil) barItems.addObject(flexSpace) //Done Button on photoFolderListPicker let doneBtn = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Done, target: self, action: Selector("photoFolderSelectionDone:")) barItems.addObject(doneBtn) doneBtn.tintColor = UIColor.whiteColor() pickerDateToolbar.setItems(barItems as [AnyObject] as? [UIBarButtonItem], animated: true) actionView.addSubview(pickerDateToolbar) actionView.addSubview(photoFolderListPicker) if (window != nil) { window!.addSubview(actionView) } else { self.view.addSubview(actionView) } UIView.animateWithDuration(0.2, animations: { self.actionView.frame = CGRectMake(0, UIScreen.mainScreen().bounds.size.height - 250.0, UIScreen.mainScreen().bounds.size.width, 250) }) } //MARK:- PICKERVIEW DELEGATE METHODS func pickerView(_pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { return model.documentFolders.count } func numberOfComponentsInPickerView(_pickerView: UIPickerView) -> Int { return 1 } func pickerView(_pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { return model.documentFolders[row].value } //MARK:- PICKERVIEW BUTTON METHODS func cancelPickerSelectionButtonClicked(sender: UIBarButtonItem) { self.navigationItem.setHidesBackButton(false, animated: true) UIView.animateWithDuration(0.2, animations: { self.actionView.frame = CGRectMake(0, UIScreen.mainScreen().bounds.size.height, UIScreen.mainScreen().bounds.size.width, 210.0) }, completion: { _ in for obj: AnyObject in self.actionView.subviews { if let view = obj as? UIView { view.removeFromSuperview() } } }) photoFolderListButton.setTitle(" "+"Select Folder", forState: UIControlState.Normal) } func photoFolderSelectionDone(sender: UIBarButtonItem) { uploadedPhotoFolderName?.isEmpty loadedFromPageSection = "fromPhotoFolderSelectionDone" self.disableScoutDetailUserInterfaceElementsDutingApiCall() //setting selectedPhotoFolderItem and selectedPhotoFolderItemId let myRow = photoFolderListPicker.selectedRowInComponent(0) selectedPhotoFolderItem = model.documentFolders[myRow].value! selectedPhotoFolderItemId = Int(model.documentFolders[myRow].key!) UIView.animateWithDuration(0.2, animations: { self.actionView.frame = CGRectMake(0, UIScreen.mainScreen().bounds.size.height, UIScreen.mainScreen().bounds.size.width, 260.0) }, completion: { _ in for obj: AnyObject in self.actionView.subviews { if let view = obj as? UIView { view.removeFromSuperview() } } }) photoFolderListButton.setTitle(" "+(selectedPhotoFolderItem as? String)!, forState: UIControlState.Normal) self.view.makeToastActivityWithMessage(message: "Fetching") //Delegate is added to class after popViewControllerAnimated(true) called model.delegate = self //API CALL - Fetching Photos AppController().fetchPropertyPhotosGallery(hbId, propertyId: scoutPropertyId, fileTypeId: selectedPhotoFolderItemId) } 
  • Тестирование автоматизации пользовательского интерфейса: как выбрать значения UIAPickerWheel?
  • Список IIPicker IOS выходит за пределы Table View Cell?
  • iOS - заполнение статического UIPickerView
  • Переопределение выделенного выделения в UIPickerView
  • Не удается получить цвет текста UIPicker
  • Замена ActionSheetPicker для ios 8
  • перерисовать вид с экрана - содержит представление выбора и панель инструментов
  • iOS - компонент отключения UIPickerView
  • Как я могу получить UIPickerview для автоматического обновления UILabel
  • iphone uipickerview: изображение и текст
  • Получить выбранное значение UIPickerView
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.