1

抱歉在这里问了这么愚蠢的问题。

实际上我有一个文本字段列表,我通过单击下一步按钮移动到下一个文本字段。它工作正常,但在那个文本字段中,一个用于日期字段,为此我使用日期选择器作为输入访问器。

当我直接单击该文本字段时,它的工作正常并且日期选择器出现。但是当我用下一个按钮键盘来到那个文本字段时,我的文本字段被隐藏了。

对于日期选择器显示,我使用 textFieldDidBegin 方法。我尝试过使用 [textfield resignFirstResponder]; 和 [datePicker becomeFirstResponder]; 但没有什么对我有用。

任何帮助将不胜感激。

谢谢。

4

5 回答 5

1

您应该使用textField.inputView属性来显示日期选择器。只有在这种情况下[textfield resignFirstResponder];才能正常工作。

- (void)viewDidLoad {
  ...
  // Assume that self.datePicker contains configured date picker view
  // With added target on UIControlEventValueChanged action
  textField.inputView = self.datePicker;
  ...
}

PS 你应该只发送 becomeFirstResponder 文本字段视图,而不是日期选择器。日期选择器只是输入视图。

于 2013-03-07T10:15:52.717 回答
1

几天前我也遇到了同样的问题,我为这种情况编写了以下代码,首先我禁用了用户交互,dataTextfield但我已经完成了触摸UITableCell。我覆盖了简单UITouch的事件方法而不是 textbegin 委托方法。请参阅我的以下代码。

在 tableviewController.h 文件中

 #import <UIKit/UIKit.h>
 #import "CustomTableCell.h"
@class CustomTableCell;
@interface PersonalInfoTableViewController : UITableViewController<CustomTableCellDelegate>{
@property(nonatomic, strong) UITextField *previousTextField;
@end

In tableviewController.m file 

 @implementation TableViewController
 @synthesize previousTextField;
//When you create custom table cell set your CustomcellDelegate = self in tableView:cellForRowAtIndexPath method\
 //also assign previousTextField to CustomTableCell textfield

-(void)tableViewTouch{
[previousTextField resignFirstResponder];
}

 in CustomTableCell.h file
#import <UIKit/UIKit.h>
 @protocol CustomTableCellDelegate
 @optional
   -(void)tableViewTouch;
 @end
@interface CustomTableCell : UITableViewCell<UITextFieldDelegate>

@property(nonatomic, unsafe_unretained) id<CustomTableCellDelegate> delegate;
@property(nonatomic, weak) IBOutlet UITextFiled *theCellTextField;
@end

in CustomTableCell.m file
@synthesize theCellTextField, delegate;
  -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
 //Here my other method to show datepicker in popupViewController on tablecell.
  [delegate tableViewTouch];
  }

这是仅 ARC 的代码

于 2013-03-07T10:25:38.153 回答
0

为您的 textField 赋予标签值,然后

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    if (textField.tag==6) {

        [textField resignFirstResponder];

        //Show your picker
    }
}
于 2013-03-07T10:35:30.180 回答
0

为带有标签 102UITextField的 datePicker 容器文本字段提供每个标签

-(void)textFieldDidBeginEditing:(UITextField *)sender
{

    if ([sender tag]==102)
    {
        [self.textFieldDatePiker resignFirstResponder];
        [self.alaramTime resignFirstResponder];
         .
         .
         . 
         //Write all textField with resignFirstResponder

        [self showPickerView];
    }

}
于 2013-03-07T10:38:12.583 回答
-1

UITextFieldtextFieldDidBegin方法获取calledtextField成为first responder.

所以textFieldShouldBeginEditingnot allow textfield editing. 也set tagtextfield你在哪里need date picker

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
 {
     if([textfield tag] == some tag no)
        [self.view endEditing:YES]; // in case if any textfiled is first responder before  date picker to open
        [datePicker becomeFirstResponder]; //open date picker
        return NO; // not edit textfield
     else 
        return YES; // edit textfield here for other case
 }
于 2013-03-07T11:02:02.933 回答