Поле TextInput с Pickerview вместо клавиатуры - PullRequest
3 голосов
/ 05 сентября 2011

Я хочу добавить средство выбора вместо клавиатуры для определенного текстового поля и заполнить представление средства выбора содержимым непосредственно в файле .m

Какой самый простой способ сделать это?

Могу ли я сделать это непосредственно в конструкторе интерфейсов или мне нужно добавить много кода самостоятельно?

Ответы [ 6 ]

1 голос
/ 17 августа 2017

Для любых разработчиков Xamarin.iOS, вот как это сделать на C #

public partial class MyViewController : UIViewController
{
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        ConfigurePicker();
    }

    void ConfigurePicker()
    {
        var pickerTextField = new UITextField();

        var picker = new UIPickerView
        {
            Model = new PickerViewModel(),
            ShowSelectionIndicator = true
        };

        var screenWidth = UIScreen.MainScreen.Bounds.Width;
        var pickerToolBar = new UIToolbar(new RectangleF(0, 0, (float)screenWidth, 44)) { BarStyle = UIBarStyle.Default, Translucent = true };
        var flexibleSpaceButton = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);
        var doneButton = new UIBarButtonItem(UIBarButtonSystemItem.Done, (sender, e) => pickerTextField.ResignFirstResponder());
        pickerToolBar.SetItems(new[] { flexibleSpaceButton, doneButton }, false);

        pickerTextField.InputView = picker;
        pickerTextField.InputAccessoryView = pickerToolBar;
    }

    class PickerViewModel : UIPickerViewModel
    {
        int[] _pickerSource = new []{ 1, 2, 3, 4, 5 };

        public override nint GetRowsInComponent(UIPickerView pickerView, nint component) => _pickerSource.Count;

        public override string GetTitle(UIPickerView pickerView, nint row, nint component) => _pickerSource[(int)row];

        public override nint GetComponentCount(UIPickerView pickerView) => 1;
    }
}
1 голос
/ 05 сентября 2011

Установите тег для этого textField и проверьте условие в методе textFieldDidBeginEditing для записи кода средства выбора.

1 голос
/ 05 сентября 2011
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self createPickerView]; 
}

-(void)createPickerView
{
    //create Picker Here
}

или Поместить кнопку на место textfeild дать бездействие согласно ей.

1 голос
/ 05 сентября 2011

Вы можете использовать пользовательскую кнопку на поле uitext.и может запустить действие для этой кнопки нажата.когда окно выбора закрывается, просто добавьте выделенный текст в текстовое поле.

0 голосов
/ 12 июля 2016
UIPickerView *picker = [[UIPickerView alloc] init];
picker.delegate = self;
picker.dataSource = self;
textField.inputView = picker;
0 голосов
/ 05 сентября 2011

вот решение для вашего вопроса

вы можете найти его в одном из вопросов о переполнении стека, нажмите на ссылку, показанную ниже.

Элегантно замените клавиатуру iPhone на UIPickerView

или

Во-первых, вот скриншот , показывающий, как это выглядит .

Реализация UITextFieldDelegate и отображение «всплывающего окна», содержащего UIPickerView.

- (void)textFieldDidEndEditing:(UITextField *)textField {

    UIPickerView *picker = [[UIPickerView alloc] 
                                 initWithFrame:CGRectMake(0, 244, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];
}

Когда клавиатура исчезает, отображается окно выбора.

Если вы хотите пойти дальше, вы можете анимировать «слайд» UIPickerView, как клавиатуру.

- (void)viewDidLoad {

    //picker exists in the view, but is outside visible range
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];
}

//animate the picker into view
- (void)textFieldDidEndEditing:(UITextField *)textField {

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,-236);
    [UIView commitAnimations];

}

//animate the picker out of view
- (void)textFieldDidBeginEditing:(UITextField *)textField {

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,236);
    [UIView commitAnimations];
}

//just hide the keyboard in this example
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return NO;
}
...