gpt4 book ai didi

iphone - 弹出UIPickerView不显示

转载 作者:行者123 更新时间:2023-11-29 04:45:08 25 4
gpt4 key购买 nike

我正在尝试实现一个弹出式 UIPickerView 来模拟单击 Safari 中的下拉字段时的行为,但到目前为止取得的成功有限。我发现:

Bottom pop-up UIPicker?

并尝试遵循这一点。到目前为止,我显示了 PopUpPickerView,但 UIPickerView 本身没有显示(我只看到 View 背景颜色显示)。

PopUpPickerViewController 有一个 nib 文件,因此当单击按钮时,会调用“更改”选择器,并且应该弹出 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

PopUpPickerView.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

最佳答案

事实证明,答案与 UIPickerView 放置的坐标有关。 UIPickerView 被放置在 PopUpPickerView 的底部,这意味着它位于屏幕外。调整坐标后一切正常。

关于iphone - 弹出UIPickerView不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com