加载时如何将 UIPickerView 放在 UIView 之外

Posted

技术标签:

【中文标题】加载时如何将 UIPickerView 放在 UIView 之外【英文标题】:How To Put UIPickerView Outside UIView when it's loaded 【发布时间】:2013-09-17 10:26:52 【问题描述】:

我已经有代码可以让 UIPickerView 像 ios 键盘一样运行,但问题是当它第一次加载时,UIPickerView 已经显示出来了。我想先将它隐藏在 UIView 区域之外,直到 UIButton 被点击。所以它会像 iOS 键盘一样动画。

这里的图片来说明我的意思:

怎么办?谢谢。

【问题讨论】:

你是说选择器视图是在应用程序启动后加载的,但你想在点击视图后加载它...... 实际上,我有 2 个 UIView,而 UIPickerView 在第二个 UIView 下。不是第一个。并且它们之间有 Push 动画。我需要的是当我转到第二个 UIView 时,UIPickerView 正在隐藏。当我点击按钮(在第二个 UIView 上)时,UIPickerView 会出现。 【参考方案1】:

只需在启动时相应地设置pickerView的框架即可。

UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(100, 900, 200, 200)];

如果您希望pickerView 从底部出现,则增加y 坐标,如果您希望pickerView 从右侧出现,则增加x 坐标值

如果pickerViewUIView 上,而UIViewController 又在某个UIViewController 上,则将ClipsToBounds 设置为YES。

[yourView setClipsToBounds:TRUE];

希望这会对您有所帮助。

【讨论】:

我尝试使用您的代码:_registerList = [[UIPickerView alloc] initWithFrame:CGRectMake(100, 900, 200, 200)];但 UIPickerView 仍然完美地坐在它的位置上。没什么变化。我还修改了 X (100) 和 Y (900) 的值,但同样没有任何变化...... 这是我在接口文件上的 UIPickerView:@property (strong, nonatomic) IBOutlet UIPickerView *registerList; 它在 viewDidLoad 中,没关系....那么我认为您必须在代码中的其他地方更改框架,尝试调试它并检查 pickerView 的框架.. 您好兄弟,感谢您的回复...但是您能否更具体地了解“更改框架”?我应该在 UIPickerView 下添加另一个 UI 组件并将其视为框架吗?谢谢 No no.... frame 是每个 UI 组件都具有的属性...通过“更改框架”我的意思是你必须在其他地方做 [registerList setFrame:CGRectMake(100,100,100,100)]在你的代码中除了初始化......只需检查这个东西【参考方案2】:

抱歉,我无法发表评论,因此我认为您已经在您的视图概念中放置了一个 UIpicker 视图,这与@xman 所说的相同。如果你没有放置选择器视图放置它

然后在 .h 中为选取器视图创建属性

@interface ViewController : UIViewController
 
 IBOutlet UIPickerView *statepicker;


@property (weak, nonatomic) IBOutlet UIView *statepickerview;

在.m中先合成

@implementation ViewController

@synthesize statepickerview;

in viewdidLoad 初始设置框的选取器视图 out of view 示例

- (void)viewDidLoad


 statepickerview.frame = CGRectMake(-9, 506, 367, 263);
[super viewDidLoad];


然后在行动中将框架调用到可见位置

- (IBAction)ButtonPress:(id)sender 

    statepickerview.frame = CGRectMake(0, 250,321, 260);



当你按下按钮时,如果它不可见,则尝试更改坐标

如果这不能正常工作,请检查此链接创建视图并将选择器视图放置在自定义视图中并更改视图的框架大小 see this link肯定会有帮助

【讨论】:

嗨,Yohan,感谢您的回复。我做了你说的,但我的问题总是在viewDidLoad。这些值(-9、506、367、263)似乎被编译器忽略了。 UIPickerView 始终位于屏幕底部。 k k 我编辑了答案我分享了一个网址检查这个视频肯定会有所帮助 设置委托、数据源和组件数量,然后执行上述操作 我看到了那个 YouTube 视频,但是我在那里看不到一些东西......我是否必须在我的 .h / .m 中导入一些东西才能使 CGRectMake 工作?因为我完全按照视频所说的做了,但 UIView(容器)仍然没有移动...... 不,你不想在几天前导入我所做的任何概念。您是否将选择器视图保存在单独的自定义视图中【参考方案3】:

您可以使用窗口的高度来设置pickerview 的y 位置。像这样:

    [self.view addSubview:pickerView];
   pickerView.frame =  CGRectMake(0, appDelegate.window.frame.size.height,pickerView.frame.size.width,pickerView.frame.size.height)

您必须在视图中添加pickerview,然后设置它的框架。

【讨论】:

我收到此错误:使用未声明的标识符“appDelegate” @RobertHanson 您需要获取对委托的引用,例如id appDelegate = [[UIApplication sharedApplication] delegate]; 第一。 @flashfabrixx :你说得对,罗伯特,你必须制作你的委托对象,然后你才能使用它。【参考方案4】:

我找到了答案...案例关闭...这完全是因为我的 XCode 项目上启用了“自动布局”...当它被禁用时,一切都按我的预期工作。

【讨论】:

以上是关于加载时如何将 UIPickerView 放在 UIView 之外的主要内容,如果未能解决你的问题,请参考以下文章

在 UI Picker View Swift 中重新加载组件

如何使用数据快速优化代码和加载 UIPickerView?

如何防止在拖动 UIPickerView 时触发按钮?

将 UIPickerView 放在 UIAlertController 的中心

可以将 UIPickerView 放在 UIAlertView 之前吗?

在 UIPickerView 上选择行时如何使用信息填充第二个视图控制器