我刚开始学习使用MonoTouch为iPad开发应用程序(主要是)。也许是因为我在C#世界的多年经验,它使我的转换非常困难,有时我觉得很愚蠢。在C#中这是非常简单的事情,但这让我抓狂了......
弹出对话框?
对于iPhone,你很少有这个要求,因为无论你展示什么都会占据整个屏幕,所以你只需为每个弹出窗口创建一个控制器。
对于iPad,我有更多空间,我不希望整个屏幕占用一些控件(例如登录屏幕)。这就是我想把它作为弹出窗口显示的原因。我在其他iPad应用程序中看到了这一点。
根据我的学习,我需要使用UIAlertView或UIActionSheet来完成这项工作。但我不明白的是,正如我读过的所有例子所示,你必须从代码中创建所有控件。
我想要做的是使用IB创建UI,并将其插入UIActionSheet。可能吗?我该怎么做?
答案 0 :(得分:6)
如果这是仅限iPad的应用程序,您将需要使用UIPopoverController。这是一个包含视图的弹出“窗口”,它链接到屏幕上的某个区域,例如工具栏按钮或矩形(例如UIButton的框架)。
要使用它,请使用接受UIViewController的构造函数创建UIPopoverController的新实例,并传递要显示的视图。
由于垃圾收集注意事项,请确保将UIPopoverController存储在类级属性中。
当弹出窗口关闭时,您可能还想清理此属性。为了支持这一点,我们将UIPopoverController子类化,添加了一个可以被调用者钩住的事件,然后覆盖了Dismiss方法并在重写方法中触发了钩子事件(如果有的话)。
实例化弹出窗口后,您将需要显示它。您可以通过其中一种PresentFromxxx方法执行此操作。如果您通过按钮(而不是工具栏)呈现此内容,则可以使用按钮的框架作为矩形调用PresentFromRect。
显示的视图可以通过在ViewDidLoad方法中设置ContentSizeForViewInPopover属性来控制其大小。
答案 1 :(得分:1)
您无法从Interface Builder编辑UIActionSheet或UIAlertView。
你可以做的是在Interface Builder中创建一个视图,并在其他视图的顶部以模态方式显示它,但听起来你不想占据整个屏幕,这就是会发生的事情。以下是模态视图控制器的示例:http://pastebin.com/h221BQdK
我认为您应该按照您提到的示例进行操作,并从代码中创建UIAlertView,也许可以将其设置为静态实用程序类。我创建了一个更像窗口的MessageBox类,但你也可以在那里放置文本框进行登录。看一下应用程序商店的登录框,它就是一个很好的例子。
答案 2 :(得分:0)
创建一个名为extraviewcontroller的viewcontroller,将其高度宽度设置为300 * 215。 并写下面的代码
inviewdidload
pickerviewTitle = [[UIPickerView alloc] initWithFrame:CGRectMake(0,0, 383, 250)];
pickerviewTitle.delegate = self;
pickerviewTitle.tag = 0;
pickerviewTitle.showsSelectionIndicator = YES;
controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ExtraViewController"];
popovercontroller = [[UIPopoverController alloc] initWithContentViewController:controller];
popovercontroller.delegate = self;
然后
UIActionSheet *actionSheet1 = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Done" destructiveButtonTitle:nil otherButtonTitles:nil];
actionSheet1.tag = 0;
actionSheet1.actionSheetStyle = UIActionSheetStyleDefault;
[actionSheet1 addSubview:pickerviewTitle];
[actionSheet1 setFrame:CGRectMake(0, 0, 600, 400)];
[controller.view addSubview:actionSheet1];
if ([popovercontroller isPopoverVisible]) {
[popovercontroller dismissPopoverAnimated:YES];
} else {
//the rectangle here is the frame of the object that presents the popover,
//in this case, the UIButton…
CGRect convertedFrame = yourclickbutton.frame;
[popovercontroller presentPopoverFromRect:convertedFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionRight
animated:YES];
}