iPad 和 UIPickerView(或 UIDatePickerView)

Posted

技术标签:

【中文标题】iPad 和 UIPickerView(或 UIDatePickerView)【英文标题】:iPad and UIPickerView (or UIDatePickerView) 【发布时间】:2010-04-29 19:48:42 【问题描述】:

有没有人在 3.2 SDK 中使用 UIPicker?我正在将 iPhone 应用程序移植到 iPad 上,而这是我似乎无法开始工作的一件事。我试过了……

-创建一个动作表,将选择器添加为子视图并显示它。

-创建上面的操作表,使其成为通用 ViewController 的视图,将该 VC 添加到 UIPopover

-仅将选取器设为通用 ViewController 的视图,并将该 VC 添加到 UIPopover

使用操作表,它甚至不会尝试绘制它。在弹出视图中,它尝试绘制但未正确呈现。

只是想看看有没有人做到这一点,如果有,是如何做到的。

谢谢大家!

【问题讨论】:

【参考方案1】:

我只是为此苦苦挣扎了大约 24 小时,然后按照本教程让它工作,无论他在哪里提到他的 UITableView,只要想想你的 UIPickerView 并替换适当的信息。

Matthew Casey - Tutorial: Introduction to Pop Over Control on iPad

简而言之,在 iPad 上,显示选取器的唯一方法是在弹出框控件内。在弹出框的内容视图控制器(选择器视图的视图控制器)和主应用程序的视图控制器之间共享数据是我无法弄清楚的一点。 (即让选取器的“didSelectRow”方法影响主视图控制器中的对象,例如 UITextField 或 UIButton。)这是通过创建自定义协议以将“didSelectRow”方法转发到主视图控制器来处理的。

我绝不是这方面的专家,所以我一步一步地学习了那个教程,最终它确实奏效了。在我找到那个教程之前,我迷路了。 (我也在将 iPhone 应用程序移植到 iPad。)

【讨论】:

【参考方案2】:

我是上述教程的作者。要使选择器在弹出窗口中工作并将所选值添加到主视图中的文本框,您需要使用协议。我创建了一个示例项目来展示这一点。我很快就会为此创建一个教程。

Sample Project

【讨论】:

我看到您附加的项目包含“build”文件夹,尽管不必要地增加了 zip 文件的文件大小,但该文件夹的贡献很大。请删除构建文件夹并尽可能重新上传。通过删除构建文件夹,zip 文件的大小从 4.2 MB 减少到 1.9 MB。【参考方案3】:

当你想在视图控制器之间共享数据时......解决方案是 NSNotificationCenter。

我知道这并不能完全回答问题,但如果我想在视图控制器之间共享数据: 在发送视图控制器中

NSMutableDictionary *toshare = [[NSMutabledictionary alloc] init];
[toshare setValue:valueToShare forKey:@"shared"];
[[NSNotificationCenter defaultCenter] postNotificationName:@"imSharing" withObject:nil userInfo:(NSDictionary *)toshare];

在接收视图控制器中: 放置在viewDidLoad中

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(imSharing:) name:@"imSharing" object:nil];

然后添加这个函数:

-(void)imSharing:(NSNotification *)notification 
      NSDictionary *dictionary = [notification userInfo]; 
        //do something with [dictionary objectForKey:@"shared"];
        dictionary = nil;

这适用于在 2 个视图控制器之间共享数据......好吧,无论如何都是少量数据。

否则在这里查看更多关于sharing data between view controllers的信息

【讨论】:

【参考方案4】:

您在使用界面生成器吗?使用 nib 文件在 Xcode 中创建一个新的 UIViewController 子类要容易得多,然后将 UIPicker 拖入。然后您需要在弹出窗口中显示视图控制器。操作表没有设计为具有子视图,所以不要这样做。

我已经做到了:见C64 Paint中的第三张截图。

【讨论】:

【参考方案5】:

感谢大家的回复。所以虽然我不能说最初的问题是什么,但我从头开始解决问题并让它发挥作用。我制作了全新的 View Controller 并将它们显示在 Popover 中,效果很好。似乎是制作通用应用程序的难点之一。

【讨论】:

【参考方案6】:

如果你在 iPad 上创建 UIPickerView,它就会工作,如果你像这样创建它:

UIPickerView* pickerView = [[UIPickerView alloc]initWithFrame: CGRectMake (someX, someY, 320, 216)];

其他一些尺寸似乎确实有效。但是 CGRectZero 不能在 iPad 上工作——即使它在 iPhone 上也能工作。

【讨论】:

以上是关于iPad 和 UIPickerView(或 UIDatePickerView)的主要内容,如果未能解决你的问题,请参考以下文章

在 iPad 的 UIActionSheet 中添加 UIPickerView

如何在 UIPickerView 上添加 UIToolbar? (iPhone/iPad)

UIPickerView 作为 inputView 不隐藏在 iPad 上

UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?

如何在运行仅 iPhone 应用程序(非通用)的 iPad 上支持 UIPickerView 中的 VoiceOver?

UIActionSheet 上的 UIDatePicker 不适用于 ipad 4.3