带有Pickerview而不是键盘的TextInput字段

时间:2011-09-05 09:57:24

标签: c# ios objective-c xamarin.ios uipickerview

我想为特定文本字段添加一个pickerview而不是一个键盘,并直接在.m文件中填充带有内容的选择器视图

实现这一目标的最简单方法是什么?

我可以直接在界面构建器中执行此操作,还是必须自行添加更多代码?

6 个答案:

答案 0 :(得分:1)

您可以在uitextfield上使用自定义按钮。并且可以按下该按钮的触发动作。 当pickerview解除时,只需在文本框中添加所选文本。

答案 1 :(得分:1)

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    [self createPickerView]; 
}

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

或将按钮置于原位文本字段根据它不作为。

答案 2 :(得分:1)

将标记设置为该textField并检查textFieldDidBeginEditing方法写入选择器代码中的条件。

答案 3 :(得分:1)

对于任何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;
    }
}

答案 4 :(得分:0)

User.where(id: 10)


User Load (0.5ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ?  [["id", 10]]
 => #<ActiveRecord::Relation []> 

答案 5 :(得分:-1)

这是您的问题的解决方案

你在其中一个堆栈溢出问题中找到它,点击下面显示的链接。

Elegantly replace iPhone keyboard with UIPickerView

首先,这是一个screencapture showing how this looks

实现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;
}