iPad和UIPickerView(或UIDatePickerView)

时间:2010-04-29 19:48:42

标签: iphone cocoa-touch ipad uipickerview iphone-sdk-3.2

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

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

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

- 只为选择器创建一个通用ViewController的视图,将该VC添加到UIPopover

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

只是想检查一下是否有人完成了这项工作,如果是这样的话。

谢谢大家!

6 个答案:

答案 0 :(得分:3)

我只是挣扎了大约24小时,并且通过遵循本教程并在他提到他的UITableView的任何地方让它工作,只需考虑你的UIPickerView并替换相应的信息。

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

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

我绝不是这方面的专家,所以我一步一步地完成了这个教程,最后DID工作了。在我找到教程之前,我迷路了。 (我也将iPhone应用移植到iPad上。)

答案 1 :(得分:2)

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

Sample Project

答案 2 :(得分:2)

如果要在视图控制器之间共享数据......解决方案是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;
}

这适用于在两个视图控制器之间共享数据......以及少量数据。

否则请查看此处了解有关sharing data between view controllers

的更多信息

答案 3 :(得分:1)

您使用的是Interface Builder吗?使用nib文件在Xcode中创建一个新的UIViewController子类要容易得多,然后在UIPicker中拖动。然后,您需要在弹出框中显示视图控制器。操作表未设计为具有子视图,因此不要这样做。

我已经完成了:请参阅C64 Paint中的第三个屏幕截图。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

如果您在iPad上创建UIPickerView,UIPickerView将会起作用:

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

其他一些尺寸确实有效。但CGRectZero无法在iPad上运行 - 即使它在iPhone中可以正常工作。