如何在IOS通用App中制作弹出菜单

时间:2015-10-28 03:54:36

标签: ios objective-c menu popup

我需要知道如何为通用app制作弹出菜单。我曾为此目的使用过警报,但我无法嵌入新的字体类型而无法添加任何图像,因此菜单看起来不太好。任何人都可以告诉我这个问题。

This is the pic of the menu i had created

警报菜单的代码

- (IBAction)setting:(UIBarButtonItem *)sender {

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

[alert show];
}

1 个答案:

答案 0 :(得分:2)

<强> PopoverViewController

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

- (IBAction)showUserDataEntryForm:(id)sender;

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

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

#import "TestViewController.h"

此外,通过将ViewController类添加到接口标题行,使TestViewControllerDelegate类符合@interface ViewController : UIViewController <UIActionSheetDelegate, TestViewControllerDelegate> 协议,如下所示: 1

TestViewController

通过采用上述协议,我们以后可以使用IBAction类的委托方法来获取输入的数据。

现在,让我们来看看本节最重要的部分,我们之前声明的ViewController.m方法的实现以及popover控制器的用法。但是对于初学者,我们必须为popover声明一个私有类属性,因此打开@interface ViewController () @property (nonatomic, strong) UIPopoverController *userDataPopover; @end 并转到界面的私有部分。在那里,添加以下属性声明:

TestViewController

现在,直接进入IBAction方法实现,我们将初始化并使用上述对象。正如我在本节开头已经说过的,popover控制器的特殊功能是能够显示另一个视图控制器的内容,因此我们必须做的第一步是初始化- (IBAction)showUserDataEntryForm:(id)sender { TestViewController *testViewController = [[TestViewController alloc] initWithNibName:@"TestViewController" bundle:nil]; testViewController.delegate = self; 类的对象

xib

}

如您所见,在初始化时我们也加载了视图控制器的testViewController文件,除此之外,我们使我们的类成为self.userDataPopover = [[UIPopoverController alloc] initWithContentViewController:testViewController]; 对象的委托。现在我们手上有一个视图控制器,让我们使用我们私下声明的popover控制器对象,让它最终出现。我们只需要添加三个命令,我们将逐步查看。最初,让我们执行初始化:

TestViewController

很明显,我们要显示的视图控制器直接作为弹出控制器的参数给出。这就是我们首先声明并初始化[self.userDataPopover presentPopoverFromRect:[(UIButton *)sender frame] inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 对象的原因。下一步是定义弹出窗口大小,它通常与包含的视图大小匹配:

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

最后,让我们显示它:

IBAction

您可以注意到此方法接受四个参数。第一个是弹出窗口所在的框架,通常是用于显示它的按钮框架。下一个是弹出控制器将出现的视图。如您所知,并不总是需要在默认视图中显示它,但这是最常见的情况。第三个参数指定弹出控制器上显示的箭头的方向,指向源自的按钮。除非您确保弹出控制器始终显示在同一个位置,否则您最好使用UIPopoverArrowDirectionAny参数来允许系统决定箭头的位置。不要忘记,当改变iPad的方向时,弹出控制器可以重新定位到一个新的位置,箭头很可能指向另一个方向。最后,最后一个参数指定是否使用动画显示弹出窗口,通常该值设置为YES。

以下是整个- (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]; } 方法:

.Export Report File = CViews.sql
.set width 200
.Rtitle ''
 .Foldline on
 .Format Off
 .set heading '';
 .set heading off;
 .set UNDERLINE OFF;
 .Omit On 4,5

Select
 CASE When ColNo = 1
 THEN 'Replace View
$view_db_name.VW_'||Tbl.Tablename||' As locking row for access
Select ('
 Else '' END (Title '')
 , Cols.Columnname (Title '')
 , CASE WHEN RevColNo = 1 THEN ')
From $db_name.'||Tbl.Tablename||';'
 Else '' END (Title '')
 , Row_Number () Over(Partition By Tbl.Tablename
 Order By Cols.ColumnId) As ColNo
 , Row_Number () Over(Partition By Tbl.Tablename
 Order By Cols.ColumnId Desc) As RevColNo
 From DBC.Tables Tbl
 Join DBC.Columns Cols
 On Tbl.Databasename = Cols.Databasename
 And Tbl.Tablename = Cols.TableName
 Where Tbl.Databasename = '$db_name'
 And Tbl.Tablekind = 'T'
 Order By Tbl.Tablename, ColNo
 ;
.Export Reset

.Run File CViews.sql