添加子视图时iOS奇怪的键盘隐藏行为

时间:2013-04-19 09:43:41

标签: ios objective-c uiview core-animation

我有一个UITextField的视图,需要在按下按钮时显示UIDatePicker(它隐藏在键盘下方)。

我懒得实例化日期选择器,因为这样可以让我更快地显示视图。

这是与点击按钮相关联的代码:

- (IBAction)hideKeyboard {
    if (!self.datePicker) {
        // UIDatePicker allocation and initialization
        self.datePicker = ...
        ...
        [self.view addSubview:self.datePicker];
    }
    [self.textField resignFirstResponder];
}

这会干扰键盘隐藏动画。实际上根本没有动画。

我的另一个线索是,这不会发生在模拟器上,而只会发生在实际设备上(iPhone 4S)。

我该如何解决这个问题?

修改

将datePicker设置为textField的inputView并不能解决我的问题。

2 个答案:

答案 0 :(得分:1)

我可以向您推荐另一种解决方案,然后隐藏键盘并使用按钮显示日期选择器。

如果我理解正确你想要在用户点击文本字段时显示日期选择器,然后你可以在文本字段中设置日期。

UITextField有一个属性

  

@property(readwrite,retain)UIView * inputView

如果将inputView属性设置为日期选择器,则文本字段将显示日期选择器而不是键盘(甚至可以像键盘一样使用动画)。

当然,这些值需要自己设置并设置为textfield。

编辑原因:编辑问题

我不知道为什么将datepicker设置为输入视图没有帮助。无论如何,如果您不想显示键盘并通过添加子视图显示日期选择器,您可以使用以下UITextField的委托方法

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField

实现委托方法。在该方法中,只需将pickerview作为子视图添加到视图中,并返回NO以不显示键盘。

编辑原因:推荐

你有没有理由不使用textfield?如果不是我会使用它,因为它使一切更容易。如果您想出于某种原因使用UILabel,那么您可以观看键盘通知。键盘何时消失,然后显示日期选择器。

对于键盘通知,请参考此处,使用示例代码进行了解释,UIKeyboardDidHideNotification可以帮助您

http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

答案 1 :(得分:0)

非常简单:

只需添加日期选择器对象作为文本字段的输入值。无需显示/隐藏键盘。

UIDatePicker *datePicker = [[UIDatePicker alloc] init];
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar] ;
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[NSDateComponents alloc] init] ;
[comps setYear:anyInteger];
NSDate *maximumDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[comps setYear:anyInteger;
NSDate *minimumDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[datePicker setMaximumDate:maximumDate];
[datePicker setMinimumDate:minimumDate];
datePicker.datePickerMode = UIDatePickerModeDate;
textField.inputView = datePicker;