Iphone 让我的UIPickerView具有与键盘相同的行为

Iphone 让我的UIPickerView具有与键盘相同的行为,iphone,uitableview,uipickerview,Iphone,Uitableview,Uipickerview,所以我有一个UITableView,其中一行是UITextView 当用户向UITextView写入内容时(使用键盘),用户可以滚动tableview并选择其他单元格。一切正常 当用户选择另一个单元格时,会出现一个日期选择器,用户可以选择给定的日期。我希望用户能够像键盘在屏幕上一样滚动tableView 这里的问题是,当我使用选取器滚动时,表格会反弹回以前的位置(有些单元格被选取器隐藏) 我假设发生这种情况是因为我将选择器作为子视图添加到主窗口中。。。但我真的不确定 我应该在何处(以及如何)添加

所以我有一个UITableView,其中一行是UITextView

当用户向UITextView写入内容时(使用键盘),用户可以滚动tableview并选择其他单元格。一切正常

当用户选择另一个单元格时,会出现一个日期选择器,用户可以选择给定的日期。我希望用户能够像键盘在屏幕上一样滚动tableView

这里的问题是,当我使用选取器滚动时,表格会反弹回以前的位置(有些单元格被选取器隐藏)

我假设发生这种情况是因为我将选择器作为子视图添加到主窗口中。。。但我真的不确定

我应该在何处(以及如何)添加选择器,使其“显示”在键盘显示的位置

我不清楚


非常感谢。

事实上,我用UIDatePicker完成了这项工作,创建了我自己的SlideUpDatePicker,它像键盘一样从底部向上设置动画。我花了一两个星期的时间才让它完美地工作,要让它在纵向和横向以及导航控制器和动画中工作肯定不容易

键盘将创建一个新的顶级窗口来保存其视图,并在其出现和消失之前和之后将通知发布到通知中心,以便视图控制器可以调整其视图的大小以适应键盘。视图控制器需要处理这些通知,并根据键盘大小调整tableview的大小

我的SlideUpDatePicker发布了与键盘相同的通知,因此视图控制器不必修改,并且可以对键盘和幻灯片更新日期选择器做出相同的响应

如果使用该功能,您可以在基于导航的应用程序中通过键盘和表视图查看UIWindow和UIView层次结构:

dumpView: <UIWindow: 0x411fd50; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4120af0>>                                                                                                                                                                                                                                                                                                                                                                                 
dumpView: : <UILayoutContainerView: 0x4123310; frame = (0 0; 320 480); autoresize = W+H; layer = <CALayer: 0x411f800>>                                                                                                                                                                                                                                                                                                                                                                                 
dumpView: : | <UINavigationTransitionView: 0x4123500; frame = (0 0; 320 480); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x41232e0>>                                                                                                                                                                                                                                                                                                                                                     
dumpView: : | : <UIViewControllerWrapperView: 0x4519d30; frame = (0 64; 320 416); autoresize = W+H; layer = <CALayer: 0x4519a40>>                                                                                                                                                                                                                                                                                                                                                                      
dumpView: : | : | <UITableView: 0x7808000; frame = (0 0; 320 416); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x45182a0>>                                                                                                                                                                                                                                                                                                                                                                
dumpView: : | : | : <DeleteCell: 0x45196e0; baseClass = UITableViewCell; frame = (0 507; 320 45); opaque = NO; autoresize = W; layer = <CALayer: 0x4519a80>>                                                                                                                                                                                                                                                                                                                                           
dumpView: : | : | : <TextCell: 0x4523280; baseClass = UITableViewCell; frame = (0 442; 320 45); autoresize = W; layer = <CALayer: 0x4521ed0>>                                                                                                                                                                                                                                                                                                                                                          
dumpView: : | : | : <DatePickerCell: 0x45224b0; baseClass = UITableViewCell; frame = (0 398; 320 44); autoresize = W; layer = <CALayer: 0x451e170>>                                                                                                                                                                                                                                                                                                                                                    
dumpView: : | : | : <ButtonCell: 0x4521680; baseClass = UITableViewCell; frame = (0 354; 320 44); autoresize = W; layer = <CALayer: 0x4521750>>                                                                                                                                                                                                                                                                                                                                                        
dumpView: : | : | : <ButtonCell: 0x45209f0; baseClass = UITableViewCell; frame = (0 310; 320 44); autoresize = W; layer = <CALayer: 0x4520ac0>>                                                                                                                                                                                                                                                                                                                                                        
dumpView: : | : | : <ButtonCell: 0x4520100; baseClass = UITableViewCell; frame = (0 266; 320 44); autoresize = W; layer = <CALayer: 0x45201d0>>                                                                                                                                                                                                                                                                                                                                                        
dumpView: : | <UINavigationBar: 0x45018b0; frame = (0 20; 320 44); clipsToBounds = YES; autoresize = W; layer = <CALayer: 0x4500fe0>>                                                                                                                                                                                                                                                                                                                                                                  
dumpView: : | : <UINavigationItemView: 0x4522a20; frame = (100 8; 160 27); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4526310>>                                                                                                                                                                                                                                                                                                                                                     
dumpView: : | : <UINavigationItemButtonView: 0x45230a0; frame = (5 7; 87 30); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4520260>>                                                                                                                                                                                                                                                                                                                                                  
dumpView: <UITextEffectsWindow: 0x4537080; frame = (0 0; 320 480); opaque = NO; layer = <CALayer: 0x45371c0>>                                                                                                                                                                                                                                                                                                                                                                                          
dumpView: : <UIKeyboard: 0x4536ce0; frame = (0 264; 320 216); opaque = NO; layer = <CALayer: 0x4536f60>>                                                                                                                                                                                                                                                                                                                                                                                               
dumpView: : | <UIKeyboardImpl: 0x4175b10; frame = (0 0; 320 216); opaque = NO; layer = <CALayer: 0x4173f90>>                                                                                                                                                                                                                                                                                                                                                                                           
dumpView: : | : <UIKeyboardLayoutStar: 0x4177d90; frame = (0 0; 320 216); layer = <CALayer: 0x4177610>>                                                                                                                                                                                                                                                                                                                                                                                                
dumpView: : | : | <UIKBKeyplaneView: 0x418a6a0; frame = (0 0; 320 216); userInteractionEnabled = NO; layer = <CALayer: 0x418a750>>                                                                                                                                                                                                                                                                                                                                                                     
dumpView: : | : | : <UIKBKeyView: 0x41748e0; frame = (1 119; 40 42); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x41545c0>>                                                                                                                                                                                                                                                                                                                                                           
dumpView: : | : | : <UIKBKeyView: 0x417e2d0; frame = (279 119; 40 42); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x417df10>>                                                                                                                                                                                                                                                                                                                                                         
dumpView: : | : | : <UIKBKeyView: 0x418a780; frame = (1 173; 78 42); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x417f990>>                                                                                                                                                                                                                                                                                                                                                           
dumpView: : | : | : <UIKBKeyView: 0x418adf0; frame = (81 173; 158 42); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x4180120>>                                                                                                                                                                                                                                                                                                                                                         
dumpView: : | : | : <UIKBKeyView: 0x418cdb0; frame = (241 173; 78 42); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x418cf20>>                    
dumpView:                                   
转储视图::                               
dumpView::|     
dumpView::|:                        
dumpView::|:|                    
dumpView::::: 
dumpView:::::                
dumpView:::::          
dumpView:::::              
dumpView:::::              
dumpView:::::              
转储视图
CGRect frame3 = self.tableView.frame;
frame3.size.height = frame3.size.height-216;
self.tableView.frame = frame3;
UIPickerView *picker = [[UIPickerView alloc] initWithFrame:CGRectZero];
//picker.delegate = self;
//picker.dataSource = self;
//[picker setShowsSelectionIndicator:YES];
textField.inputView = picker;
[picker release];
-(void)handleViewTapGesture:(UITapGestureRecognizer *)gesture
{
    [self endEditing:YES];
}
-(void) setLoginView:(LoginView *)loginView
{
    _loginView = loginView;

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self.loginView action:@selector(handleTapGesture:)];    

    [tapRecognizer setDelegate:self];  // self implements the UIGestureRecognizerDelegate protocol

    [self.loginView addGestureRecognizer:tapRecognizer];    
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{    
    if ([touch.view isKindOfClass:[UIButton class]])    // Customize appropriately.
        return NO; // Don't let the custom gestureRecognizer handle the touch   

    return YES;
}