![](/img/trans.png)
[英]Table View Controllers created in Interface Builder have their bottom cells clipped and obscured on iPhone X
[英]Creating popover view controllers for Iphone in Interface Builder
我該怎么做呢? 我知道我必須給popover一個視圖控制器,它構建它的視圖,但我不知道如何在Interface Builder中構建這個視圖(比如添加標簽和按鈕等等)。
我是否只是在普通的故事板中進行操作,並且有一個隨機地與其他任何東西無關的故事板,坐在角落里?
我是否創建了另一個故事板?
即使我的項目都是故事板,我也會創建一個xib嗎?
我是以編程方式創建的嗎?
由於你沒有在你的問題中指定目標設備,我給你Ipad答案
IPAD:
轉到您的故事板,將viewcontroller
或tableviewcontroller
拖放到您的身上。 然后在故事板上從所需的viewcontroller
創建一個segue到新拖放的viewcontroller
。 選擇你的segue作為popOver
。
確保在segue設置中選擇錨點,如上圖所示。 然后,您需要編輯彈出窗口的大小。 如果它是一個uiviewcontroller
選擇自己的看法,如果其tableviewcontroller
選擇在界面生成器的左側它的tableview和編輯它的大小。
第一:
第二:
之后,自定義您的彈出視圖控制器(拖放視圖控制器)添加按鈕,標記您想要的任何內容。
如果你打算在你的popover中做更多的事情:別忘了創建新文件 - > uiviewcontroller或uitableviewcontroller的子類。 然后將它與故事板上新創建的viewcontroller關聯。
蘋果手機:
iphone中沒有Popover控制器
但是你嘗試使用QuartzCore
第三方https://github.com/50pixels/FPPopover解決方案來模仿iphone中的QuartzCore
行為
我會嘗試以下:
第一:
再次將uiviewcontoller
拖放到故事板中,然后創建一個新文件 - > uiviewcontroller
子類。
這個新的uiviewcontroller
將位於故事板的角落
然后將故事板中的uiviewcontroller與新創建的文件相關聯,假設您使用YourViewController
創建了一個新文件名。 為您的視圖提供一個storyboard id並選擇其類名。
-(IBAction)buttonClicked:(UIButton*)okButton
{
//the view controller you want to present as popover
YourViewController *controller = [[YourViewController alloc] init];
//if [[YourViewController alloc] init]; doesn't work try this
// UIStoryboard* sb = [UIStoryboard storyboardWithName:@"MainStoryboard"
bundle:nil];
//YourViewController *controller = [sb instantiateViewControllerWithIdentifier:@"YourViewController"];
//our popover
FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller];
//the popover will be presented from the okButton view
[popover presentPopoverFromView:okButton];
//no release (ARC enable)
//[controller release];
}
注意:我之前沒有使用過FPPopover因此不知道如何安排屏幕尺寸,但是在他們的文檔中必須進一步解釋才能閱讀它。
我認為iPhone設備的更好方法是,創建一個View控件,其View的背景顏色設置為clear。 然后在此視圖中,您只需添加一個較小的視圖,該視圖將顯示彈出窗口的外觀。
呈現此視圖控制器將給出彈出窗口的外觀。 這是我采取的方法。 如果用戶點擊父視圖上不在較小視圖范圍之外的區域,則可以關閉視圖控制器。
iPhone解決方案
由於iOS 8.0也可以為iPhone應用程序實現這一點!
目標視圖控制器(應該出現在彈出框中的那個 )需要符合' UIPopoverPresentationControllerDelegate '協議,並且必須實現消息' adaptivePresentationStyleForPresentationController:traitCollection: '。 除此之外,它的' modalPresentationStyle '應該是' UIModalPresentationPopover ',控制器應該是他自己的' UIPopoverPresentationController '委托。
在以這種方式准備視圖控制器之后,只需從UINavigationBarItem(或其他任何內容)創建一個storyboard segue(類型:'Present As Popover')到目標視圖控制器。
執行:
@implementation TestViewController
/*
initWithCoder:
*/
- (instancetype)initWithCoder:(NSCoder *)pDecoder {
//FLog;
if (self = [super initWithCoder:pDecoder]) {
self.modalPresentationStyle = UIModalPresentationPopover;
self.popoverPresentationController.delegate = self;
}
return self;
}
#pragma mark - POPOVER PRESENTATION CONTROLLER DELEGATE
/*
adaptivePresentationStyleForPresentationController:traitCollection:
*/
- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)pController
traitCollection:(UITraitCollection *)pTraitCollection {
//FLog;
return UIModalPresentationNone;
}
// ...
@end
當然委托協議也可以在其他類中實現,但這種方式最簡單:-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.