2012-03-19 27 views
0

これまでのところ成功しなかったSafariのドロップダウンフィールドをクリックすると、動作をエミュレートするためのポップアップUIPickerViewを実装しようとしています。私が見つかりました:ポップアップUIPickerViewが表示されません

Bottom pop-up UIPicker?

をし、これに従うことを試みてきました。これまでのところ私はPopUpPickerViewを表示していますが、UIPickerView自体は表示されません(私はビューの背景色が表示されているだけです)。

PopUpPickerViewControllerにはnibファイルがあり、ボタンをクリックすると 'change'セレクタが呼び出され、UIPickerViewがポップアップするようになります。現時点では、PopUpPickerViewの背景色だけがポップアップします。

ご提供いただけるお手伝いをさせていただきます。前もって感謝します!次のように

私のコードは次のとおりです。

PopUpPickerViewController.h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 
#import "PopUpPickerView.h" 

#define UIColorMakeRGBA(nRed, nGreen, nBlue, nAlpha) [UIColor colorWithRed: (nRed)/255.0f green: (nGreen)/255.0f blue:(nBlue)/255.0f alpha:nAlpha] 

@class PopUpPickerView; 

@interface PopUpPickerViewController : UIViewController{ 
    NSArray *pickerData; 
    PopUpPickerView *pickerView; 
    UIPickerView *picker; 
} 

-(IBAction)change:(id)sender; 
-(void)addSubviewToWindow:(UIView*) addView; 

@property(nonatomic, retain) PopUpPickerView *pickerView; 
@property(nonatomic, retain) NSArray *pickerData; 
@property(nonatomic, retain) UIPickerView *picker; 

@end 

PopUpPickerViewController.m

#import "PopUpPickerViewController.h" 
#import "PopUpPickerView.h" 

@implementation PopUpPickerViewController 

@synthesize pickerData, pickerView, picker; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.pickerView = [[PopUpPickerView alloc] initWithFrame:CGRectMake(0.0, 174.0, 320.0, 286.0)]; 
    self.picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 70.0, 320.0, 216.0)]; 
    self.pickerView.picker = self.picker; 
    //[self.picker addTarget:self action:@selector(pickerValueChanged:) forControlEvents:UIControlEventValueChanged]; 
    self.pickerView.parentViewController = self; 
    [self.pickerView addSubview:self.picker]; 
} 

- (void)viewDidUnload 
{ 
    [super viewDidUnload]; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

-(IBAction)change:(id)sender{ 
    PopUpPickerView *pView = (PopUpPickerView*) pickerView; 
    [pView animateDatePicker:YES]; 

} 

-(void)addSubviewToWindow:(UIView*) addView{ 
    [self.view addSubview:addView]; 
} 

@end 

PopUpPickerViewの.h

#import <UIKit/UIKit.h> 
#import "PopUpPickerViewController.h" 

@class PopUpPickerViewController; 

@interface PopUpPickerView : UIView<UIPickerViewDelegate, UIPickerViewDataSource>{ 
    UIPickerView *picker; 
    PopUpPickerViewController *parentViewController; 
    NSArray *pickerData; 
} 

-(void)animateDatePicker:(BOOL)show; 

@property(nonatomic, retain) UIPickerView *picker; 
@property(nonatomic, retain) NSArray *pickerData; 
@property(nonatomic, retain) PopUpPickerViewController *parentViewController; 

@end 

PopUpPicker View.m

#import "PopUpPickerView.h" 
#import "PopUpPickerViewController.h" 

@implementation PopUpPickerView 

@synthesize picker, pickerData, parentViewController; 

- (void)animateDatePicker:(BOOL)show { 

    pickerData = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 

    self.picker.delegate = self; 
    self.picker.dataSource = self; 

    CGRect screenRect = self.frame; 
    CGSize pickerSize = [self.picker sizeThatFits:CGSizeZero]; 

    CGRect startRect = CGRectMake(0.0, 
           screenRect.origin.y + screenRect.size.height, 
           pickerSize.width, pickerSize.height); 

    CGRect pickerRect = CGRectMake(0.0, 
           screenRect.origin.y + screenRect.size.height, 
           pickerSize.width, 
           pickerSize.height); 

    self.picker.frame = pickerRect; 
    self.backgroundColor = UIColorMakeRGBA(255, 125, 64, 0.7f - (int)show * 0.7f); 

    if (show) { 
     self.picker.frame = startRect; 
     PopUpPickerViewController *controller = (PopUpPickerViewController*) self.parentViewController; 
     [controller addSubviewToWindow:self]; 
    } 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3f]; 
    [UIView setAnimationDelegate:self]; 

    self.backgroundColor = UIColorMakeRGBA(255, 125, 64, 0.0f + (int)show * 0.7f); 

    if (show) { 
     self.picker.frame = pickerRect; 

    } else { 
     [UIView setAnimationDidStopSelector:@selector(slideDownDidStop)]; 
     self.picker.frame = startRect; 
    } 

    [UIView commitAnimations]; 
} 

-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [pickerData count]; 
} 

-(NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [self.pickerData objectAtIndex:row]; 
} 


@end 

答えて

1

それは答えはUIPickerViewが置かれたときの座標でやることだったことが判明しました。 UIPickerViewは、それがオフスクリーンであることを意味するPopUpPickerViewの下部に配置されていました。座標を調整した後、すべてうまく動きました。

0

私はSBTableAlertを数回使用している、あなたが必要とするものを提供ではなくUIPickerViewののUITableViewでいるようです。見て、あなたのプロジェクトで役立つことを願っています。

Git Repo

+0

提案に感謝していますが、私はUIPickerViewをドロップダウンフィールドに触れるとSafariで起こるように画面の下からスライドさせようとしています。これは、その中にUITableViewを持つモーダルダイアログを生成するようです。 – rwbutler

関連する問題