0

レスポンダーを辞任する「完了」ボタンとして機能するために、UITextfield 内に UIButton を配置しようとしています。次のコードを試してみました。フィールドがUITextFieldの完了ボタンの編集を開始すると、leftViewが表示されますが、datePickerから値を選択するか、キーボードでテキスト入力を行うと(シミュレーターで)、完了ボタンが消えます右の clearButton が表示されます。

両方を切り替えているようです。 textFld.LeftViewMode を変更して、常にボタンを表示するようにしましたが、それは私が望むものではありません...

前もって感謝します!。

- (void)viewDidLoad
{
    [super viewDidLoad];


    txtFld = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 310, 25)];
    txtFld.placeholder = @"__/__/____";
    txtFld.font = [UIFont fontWithName:@"HelveticaNeue" size:11];
    txtFld.textAlignment = NSTextAlignmentCenter;
    txtFld.contentVerticalAlignment = UIControlContentHorizontalAlignmentCenter;
    txtFld.contentHorizontalAlignment = UIControlContentVerticalAlignmentCenter;
    txtFld.clearButtonMode = UITextFieldViewModeWhileEditing;
    txtFld.borderStyle = UITextBorderStyleRoundedRect;

    UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    doneButton.bounds = CGRectMake(0, 0, 40, 20);
    doneButton.frame = CGRectMake(0.0, 0.0, 40.0, 20.0);
    doneButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:10];
    [doneButton setTitle:@"Done" forState:UIControlStateNormal];
    doneButton.imageEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0);
    [doneButton addTarget:self action:@selector(resignResponder:) forControlEvents:UIControlEventTouchUpInside];
    doneButton.userInteractionEnabled = YES;

    // Add button to the UITextField
    txtFld.leftView = doneButton;
    txtFld.leftViewMode = UITextFieldViewModeWhileEditing;

    UIDatePicker *datePicker = [[UIDatePicker alloc] init];
    datePicker.datePickerMode = UIDatePickerModeDate;
    [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
    [txtFld setInputView:datePicker];

    [self.view addSubview:txtFld];

}

-(void)resignResponder:(UIButton *)sender{
        UITextField *associatedTxtFld = (UITextField *) sender.superview ;
        if ([associatedTxtFld isFirstResponder]) {
            [associatedTxtFld resignFirstResponder];
        }
}

-(void)datePickerValueChanged:(id)sender{
    UIDatePicker *picker = (UIDatePicker *)sender;
    NSDateFormatter *formater = [[NSDateFormatter alloc]init];
    [formater setDateFormat:@"dd-MM-yyyy"];
    txtFld.text = [formater stringFromDate:picker.date];

}
4

1 に答える 1

0

以下のコードは私にとってはうまくいきます。これは、ピッカービューを辞任するための解決策になる可能性があります

UITextField *dispayNameField = [UITextField  alloc]init];
UIButton *userStatusButton = [UIButton buttonWithType:UIButtonTypeCustom];
    userStatusButton.frame=CGRectMake(0, 0, 20, 20);
    [userStatusButton addTarget:self action:@selector(selectUserStatus) forControlEvents:UIControlEventTouchUpInside];
    displayNameField.rightViewMode = UITextFieldViewModeAlways;
    displayNameField.rightView = _userStatusButton;


-(void)selectUserStatus
{
    displayNameField.inputView = _dataPickerView;
    self.editUserProfileScrollView.scrollEnabled = YES;
    UIActionSheet *actionSheetForDate = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
    [actionSheetForDate showInView:self.parentViewController.tabBarController.view];
    [actionSheetForDate setBounds:CGRectMake(0,0,320, 500)];
    UIDatePicker = [[UIDatePicker alloc]initWithFrame:CGRectMake(0, 50, 320, 216)];
    _dataPickerView.tag = 1;
    _dataPickerView.showsSelectionIndicator = YES;
    _dataPickerView.dataSource = self;
    _dataPickerView.delegate = self;
    [_actionSheetForDate addSubview:_dataPickerView];
    [_actionSheetForDate sendSubviewToBack:_dataPickerView]; 
    UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    pickerToolbar.barStyle = UIBarStyleBlackTranslucent;
    [pickerToolbar sizeToFit];
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismissActionSheetUserField)];
    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    UIBarButtonItem *btnBarCancel = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissActionSheetUserField)];
    [pickerToolbar setItems:[NSArray arrayWithObjects:btnBarCancel,flexSpace,doneButton, nil] animated:YES];
    [_actionSheetForDate addSubview:pickerToolbar];
    displayNameField.inputAccessoryView = pickerToolbar;
}
于 2013-03-19T04:11:18.927 に答える