用的UIDatePicker更换的UITextField输入(Replacing UITextFie

2019-09-18 04:45发布

我有一个表视图控制器(等等)是用于表示一个日期的细胞。 我跟着这个帖子“ 我如何做一个模态日期选择器,只有覆盖半个屏幕? ”和我有一个很大的例外的工作-我不能让机械手消失!

我试图在登记事件UIControlEventTouchUpOutside,但似乎这不是由选择器产生的(或至少在我使用它的方式)。

我怎样才能识别出用户已完成选择日期?

此外,有没有办法直接输入到的UITextField禁用用户? 我想强迫他们使用机械臂。 我看到这个帖子“ 禁用闪烁光标的UITextField? ”,但有另一种方式?

Reagards,

- 约翰

Answer 1:

试试这个代码..我在这里把一个日期选择器来为UITextField ..它会在右上角导航栏完成按钮..所以通过点击完成,我将用户可解除的日期选择器..另一个最好的方法是通过将具有完成按钮的日期选择器上方工具栏..改变你可以填充文本字段的日期选择器时,试试这个,将工作..希望这有助于..

看到这个计算器链接https://stackoverflow.com/a/4824319/763747这将有做过按钮,工具栏keybord上面的日期选择器..

#pragma mark -
#pragma mark - TextField Delegate

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{
    [textField resignFirstResponder];
    return TRUE;
}


- (void) textFieldDidBeginEditing:(UITextField *)textField {
    itsRightBarButton.title  = @"Done";
    itsRightBarButton.style = UIBarButtonItemStyleDone;
    itsRightBarButton.target = self;
    itsRightBarButton.action = @selector(doneAction:);
    if ([textField isEqual:itsIncidentDateTextField])
    {
        itsDatePicker = [[[UIDatePicker alloc] init] autorelease];
        itsDatePicker.datePickerMode = UIDatePickerModeDate;
        [itsDatePicker addTarget:self action:@selector(incidentDateValueChanged:) forControlEvents:UIControlEventValueChanged];
        //datePicker.tag = indexPath.row;
        textField.inputView = itsDatePicker;
    }
}

- (IBAction) incidentDateValueChanged:(id)sender{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMM d, yyyy"];
    itsIncidentDateTextField.text = [dateFormatter stringFromDate:[itsDatePicker date]];
    [dateFormatter release];
}


Answer 2:

我用的消失的UIDatePicker不同的方法。

创建一个XIB(NIB)文件,并添加到它的UIDatePicker然后调整视图大小,使其适合只有的UIDatePicker,创建一个属性(使它强和非原子)在您的视图控制器(或者你使用任何类,当然合成)。

@property (nonatomic, strong) UIView *myDatePickerView;  
@synthesize myDatePickerView;

然后创建一个loadDatePickerView方法

- (void) loadDatePickerView
{
    UINib *nib = [UINib nibWithNibName:kNIBname bundle:[NSBundle mainBundle]];
    NSArray *views = [nib instantiateWithOwner:self options:nil];
    self.myDatePickerView = [views firstObject];
    [myDatePickerView setFrame:CGRectMake(0, 318, 320, 162)];
    [self.view addSubview:myDatePickerView];
}

实施UITextFieldDelegate,并在textFieldDidBeginEditing方法调用loadDatePickerView方法

[self loadDatePickerView];

使函数创建一个属性,它是一个的UIDatePicker实例

@property (nonatomic,strong) 

UIDatePicker *myDatePicker;

(合成当然)

现在创建了以下这样一个IBAction为

-(IBAction)datePickerValueChanged:(UIDatePicker *)sender
{
    myDatePicker = [[myDatePickerView subviews] lastObject];
    //now you can do whatever you want with the DatePicker
}

现在IBAction为连接到在XIB文件中的选择器,这样的厦门国际银行,现在是您在VC创建的UIDatePicker例如,如果你希望它消失,你可以添加一个UITapGestureRecognizer(在viewDidLoad中),并选择将是另一个IBAction为从它的这样的SuperView删除myDatePickerView:

- (void)viewDidLoad
{
    [super viewDidLoad];
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self     action:@selector(dropPicker:)];
    [self.view addGestureRecognizer:tap];
    [self datePickerValueChanged:myDatePicker];
}

-(IBAction)dropPicker:(id)sender
{
    [myDatePickerView removeFromSuperview];
} 


文章来源: Replacing UITextField input with a UIDatePicker