簡體   English   中英

如何在IOS通用App中制作彈出菜單

[英]how to make popup menu in IOS universal App

我需要知道如何為通用應用程序制作彈出菜單。我為此使用了警報,但我無法嵌入新的字體類型,也無法添加任何圖像,因此菜單看起來不太好。任何人都可以告訴我解決這個問題的方法。

這是我創建的菜單的圖片

警報菜單的代碼

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

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

[alert show];
}

彈出視圖控制器

打開 ViewController.h 文件,並聲明以下IBAction方法: 1

- (IBAction)showUserDataEntryForm:(id)sender;

返回到 Interface Builder,並將該操作方法連接到新添加的按鈕。

現在,再次打開ViewController.h文件,首先導入TestViewController類,如下所示: 1

#import "TestViewController.h"

此外,通過將ViewController類添加到界面標題行,使其符合TestViewControllerDelegate協議,如下所示: 1

@interface ViewController : UIViewController <UIActionSheetDelegate, TestViewControllerDelegate>

通過采用上面的協議,我們以后就可以使用TestViewController類的delegate方法來獲取輸入的數據了。

現在,讓我們進入本節最重要的部分,我們之前聲明的IBAction方法的實現以及 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對象的委托。 現在我們手上有了一個視圖控制器,讓我們使用我們私下聲明的彈出控制器對象,讓它最終出現。 我們只需要添加三個命令,我們會一步一步地看到。 首先,讓我們執行初始化:

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

很明顯,我們要顯示的視圖控制器是直接作為參數提供給 popover 控制器的。 這就是我們首先聲明並初始化TestViewController對象的原因。 下一步是定義彈出框的大小,它通常與包含的視圖的大小相匹配:

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

最后,讓我們展示一下:

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

如您所見,此方法接受四個參數。 第一個是彈出框起源的框架,通常是用於呈現它的按鈕的框架。 下一個,是彈出控制器將出現的視圖。 如您所知,並不總是需要在默認視圖中顯示它,但這是最常見的情況。 第三個參數指定出現在 popover 控制器上的箭頭的方向,指向起源於的按鈕。 除非你確保彈窗控制器總是顯示在同一個地方,否則你最好使用 UIPopoverArrowDirectionAny 參數讓系統決定箭頭的位置。 不要忘記,當改變 iPad 的方向時,popover 控制器可以重新定位到一個新的位置,而且很可能箭頭應該指向另一個方向。 最后,最后一個參數指定是否使用動畫顯示彈出框,通常該值設置為 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];


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM