如何在iOS通用应用程序中创buildpopup式菜单

我需要知道如何使一个通用的应用程序的popup菜单。我曾经使用警报的目的,但我不能够embedded新的字体types,不能够添加任何图像,因此菜单看起来不好。任何一个告诉我解决这个问题的方法。

这是我创建的菜单的图片

警报菜单的代码

- (IBAction)setting:(UIBarButtonItem *)sender { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"དཀར་ཆག" message:@"\nགང་རུང་ཞིག་འདེམས་རོགས།" delegate:self cancelButtonTitle:@"ཕྱིར་འཐེན།" otherButtonTitles:@"ཉེ་འཆར།",@"དགའ་མོས།",@"ཉེ་འཆར་གཙང་བཟོ།",@"དགའ་མོས་གཙང་བཟོ།",nil]; [alert show]; } 

PopoverViewController

打开ViewController.h文件,并声明以下的IBAction方法:1

 - (IBAction)showUserDataEntryForm:(id)sender; 

返回到Interface Builder,并将该操作方法连接到新添加的button。

现在再次打开ViewController.h文件,首先导入TestViewController类,如下图所示:

 #import "TestViewController.h" 

另外,通过将ViewController类添加到如下所示的接口标题行中,使ViewController类符合TestViewControllerDelegate协议:1

 @interface ViewController : UIViewController <UIActionSheetDelegate, TestViewControllerDelegate> 

通过采用上述协议,我们可以稍后使用TestViewController类的委托方法并获取input的数据。

现在,让我们来看看本节最重要的部分,实现我们之前声明的IBAction方法以及popover控制器的用法。 不过,对于初学者来说,我们必须为popover声明一个私有类属性,所以打开ViewController.m并转到接口的私有部分。 在那里,添加下面的属性声明:

 @interface ViewController () @property (nonatomic, strong) UIPopoverController *userDataPopover; @end 

现在,直接前往IBAction方法实现,在这里我们将初始化并使用上述对象。 正如我在本节开头所述,popover控制器的特点是能够显示另一个视图控制器的内容,因此我们必须做的第一步是初始化TestViewController类的一个对象。

 - (IBAction)showUserDataEntryForm:(id)sender { TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil]; testViewController.delegate = self; 

}

正如你所看到的,在初始化的时候,我们也加载了视图控制器的xib文件,除此之外,我们把我们的类作为testViewController对象的委托。 现在我们手上有一个视图控制器,让我们使用我们私下声明的popover控制器对象,并让它最终出现。 我们只需要添加三个命令,我们将逐步看到。 最初,我们来执行初始化:

 self.userDataPopover = [[UIPopoverController alloc] initWithContentViewController:testViewController]; 

很明显,我们想要显示的视图控制器直接作为popover控制器的参数给出。 这就是为什么我们首先声明并初始化TestViewController对象。 下一步是定义popover的大小,通常匹配包含的视图的大小:

self.userDataPopover.popoverContentSize = CGSizeMake(320.0,400.0);

最后,我们来展示它:

 [self.userDataPopover presentPopoverFromRect:[(UIButton *)sender frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

你可以注意到这个方法接受四个参数。 第一个是popover起源的框架,通常是用来呈现它的button的框架。 下一个是popover控制器将会出现的视图。 正如你所理解的,并不总是需要在默认视图中显示它,但这是最常见的情况。 第三个参数指定popup控制器上出现的箭头的方向,指向源自的button。 除非你确定popover控制器总是显示在同一个地方,那么你最好使用UIPopoverArrowDirectionAny参数来让系统决定箭头的位置。 不要忘记,当改变iPad的方向时,popover控制器可以重新定位到一个新的地方,并且很有可能箭头指向另一个方向。 最后,最后一个参数指定popup窗口是否使用animation显示,通常该值设置为YES。

这是整个IBAction方法:

 - (IBAction)showUserDataEntryForm:(id)sender { TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil]; testViewController.delegate = self; self.userDataPopover = [[UIPopoverController alloc] initWithContentViewController:testViewController]; self.userDataPopover.popoverContentSize = CGSizeMake(320.0, 400.0); [self.userDataPopover presentPopoverFromRect:[(UIButton *)sender frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; }