很抱歉在这里提出这样一个愚蠢的问题。
实际上我有一个文本列表,我通过点击下一个按钮移动到下一个文本字段。 它的工作正常,但在那个textfields中,一个用于日期字段,为此我使用日期选择器作为输入访问器。
当我直接点击该文本字段时,它的工作正常和日期选择器来了。 但是,当我使用下一个按钮键盘来到该文本字段时,隐藏了我的文本字段。
对于日期选择器显示我正在使用textFieldDidBegin方法。我试过用 [textfield resignFirstResponder]; 和[datePicker成为FirstResponder]; 但没有什么对我有用。
任何帮助将不胜感激。
感谢。
答案 0 :(得分: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;
...
}
P.S。您应该只向文本字段视图发送yesFirstResponder,而不是日期选择器。日期选择器只是输入视图。
答案 1 :(得分:1)
前几天我也面临同样的问题,我为这个场景编写了以下代码,首先我在dataTextfield
上禁用了userinteraction,但我已经触及完整的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的代码
答案 2 :(得分:0)
为textField提供标记值,然后
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
if (textField.tag==6) {
[textField resignFirstResponder];
//Show your picker
}
}
答案 3 :(得分:0)
为datePicker容器提供每个UITextField
的标记包含标记102的文本字段
-(void)textFieldDidBeginEditing:(UITextField *)sender
{
if ([sender tag]==102)
{
[self.textFieldDatePiker resignFirstResponder];
[self.alaramTime resignFirstResponder];
.
.
.
//Write all textField with resignFirstResponder
[self showPickerView];
}
}
答案 4 :(得分:-1)
textFieldDidBegin
成为called
时, UITextField 的textField
方法获得first responder
。
因此请textFieldShouldBeginEditing
使用not allow textfield editing
。同样set tag
textfield
,其中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
}