Ios 情节提要-作为UIPopoverController打开UIViewController
对于我的iPad版本的应用程序,我希望通过单击按钮以Ios 情节提要-作为UIPopoverController打开UIViewController,ios,iphone,objective-c,xcode,uiviewcontroller,Ios,Iphone,Objective C,Xcode,Uiviewcontroller,对于我的iPad版本的应用程序,我希望通过单击按钮以UIPopoverController的形式打开我的UIViewController。下面是打开视图控制器的实际代码。如何轻松地将此类代码转换为打开UIViewController作为uipopcovercontroller 代码: 使用类似于: if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { UIPopoverController *poc = [[UIPopov
UIPopoverController
的形式打开我的UIViewController
。下面是打开视图控制器的实际代码。如何轻松地将此类代码转换为打开UIViewController
作为uipopcovercontroller
代码:
使用类似于:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:aboutView];
[poc presentPopoverFromRect:CGRectMake(somePoint.x, somePointY, 1.0, 1.0) inView:self.view permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
} else {
aboutView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:aboutView animated:YES completion:NULL];
}
您还可以通过按钮显示Popor,还可以控制Popor的显示方向。如果您使用uipopopoverarrowdirectionany
,iOS将做出明智的决定,使popover可见
您还应该保留对您的popover的强引用,并且只在它为nil
时显示它,以确保popover只显示一次。这意味着如果popover被解除,请将保存它的属性设置为nil
使用类似以下内容:
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIPopoverController *poc = [[UIPopoverController alloc] initWithContentViewController:aboutView];
[poc presentPopoverFromRect:CGRectMake(somePoint.x, somePointY, 1.0, 1.0) inView:self.view permittedArrowDirections: UIPopoverArrowDirectionAny animated:YES];
} else {
aboutView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:aboutView animated:YES completion:NULL];
}
您还可以通过按钮显示Popor,还可以控制Popor的显示方向。如果您使用uipopopoverarrowdirectionany
,iOS将做出明智的决定,使popover可见
您还应该保留对您的popover的强引用,并且只在它为
nil
时显示它,以确保popover只显示一次。这意味着,如果popover被解除,请将保持它的属性设置为nil
一个常见的解决方案是有两个故事板,一个用于iPhone,一个用于iPad。这样,您就可以在iPad故事板中使用popover segue,在iPhone故事板中使用modal segue。您可以随时安排Info.plist,以便在启动时自动加载正确的故事板。不过,您仍然需要一些条件代码,因为您的代码对显示视图控制器的响应与使用popover不同。常见的解决方案是使用两个故事板,一个用于iPhone,一个用于iPad。这样,您就可以在iPad故事板中使用popover segue,在iPhone故事板中使用modal segue。您可以随时安排Info.plist,以便在启动时自动加载正确的故事板。不过,您仍然需要一些条件代码,因为您的代码对显示的视图控制器的响应与使用popover控制器的响应不同。只需在故事板中使用popover segue,也只需在故事板中使用popover segue,知道如何取消它就好了。我会认为[自我否定:是的];执行此技巧,但编译器没有看到它,因为它是一个视图控制器。Apple关于dismissPopoverAnimated:您可以使用此方法以编程方式关闭popover,以响应popover窗口内的点击。点击popover内容之外的内容会自动关闭popover。
因此,如果需要在代码中关闭它,则需要在popover viewcontroller本身上调用它,而不是在演示器上调用它。此外,如果poc自动解除,请使用其委托方法-(void)PopOvercontrollerdDismissPopOver:(UIPopoverController*)popoverController
将指向它的指针设置为nil,如答案中所述。此外,知道如何解除它也很好。我会认为[自我否定:是的];执行此技巧,但编译器没有看到它,因为它是一个视图控制器。Apple关于dismissPopoverAnimated:您可以使用此方法以编程方式关闭popover,以响应popover窗口内的点击。点击popover内容之外的内容会自动关闭popover。
因此,如果需要在代码中关闭它,则需要在popover viewcontroller本身上调用它,而不是在演示器上调用它。此外,如果poc自动解除,请使用其委托方法-(void)PopOvercontrollerdDismissPopOver:(UIPopoverController*)popoverController
将指向它的指针设置为nil,如回答中所述。