自定义UIStoryboardPopoverSegue在iOS 5.1下无法工作
我已经实现了一个自定义的故事板segue,它在iOS 6下运行良好,但在iOS 5.1下的模拟器中什么也没有发生。 问题是,在iOS 5.1下,popoverController总是为零自定义UIStoryboardPopoverSegue在iOS 5.1下无法工作,ios,uistoryboardsegue,Ios,Uistoryboardsegue,我已经实现了一个自定义的故事板segue,它在iOS 6下运行良好,但在iOS 5.1下的模拟器中什么也没有发生。 问题是,在iOS 5.1下,popoverController总是为零 @implementation PopoverFromRectSegue -(id)initWithIdentifier:(NSString *)identifier source:(UIViewController *)source destination:(U
@implementation PopoverFromRectSegue
-(id)initWithIdentifier:(NSString *)identifier
source:(UIViewController *)source
destination:(UIViewController *)destination {
if(self = [super initWithIdentifier:identifier
source:source
destination:destination]) {
}
return self;
}
- (void)perform {
UIPopoverController *popCtrl = ((UIStoryboardPopoverSegue *)self).popoverController;
id controller = [self sourceViewController];
if ([controller isKindOfClass:[UIViewController class]] && [controller respondsToSelector:@selector(popoverRect)]) {
[popCtrl presentPopoverFromRect:[[controller performSelector:@selector(popoverRect)] CGRectValue] inView:[controller view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
@end
任何帮助/提示都将不胜感激
编辑:
刚刚做了一个新的样本项目。在iOS5.1下,似乎没有设置popoverController
用于自定义UIStoryBoardSegues。
我还能做什么。
普通的popover需要一个锚,但原型tableView单元格不被接受(编译过程中失败),我找不到修改显示popover的rect的方法。这是我的解决方法。pooverfromrectsegue.h
@interface PopoverFromRectSegue : UIStoryboardPopoverSegue
@property (strong, nonatomic) UIPopoverController *popoverCtrl;
@end
popOverlectFromSegue.m
#import "PopoverFromRectSegue.h"
@implementation PopoverFromRectSegue
- (void)perform
{
UIPopoverController *popCtrl = ((UIStoryboardPopoverSegue *)self).popoverController;
// under iOS 5.1 the popoverController iVar is not set
// so we have to use our own one
if (nil == popCtrl) {
popCtrl = self.popoverCtrl;
}
id controller = [self sourceViewController];
if ([controller isKindOfClass:[UIViewController class]] && [controller respondsToSelector:@selector(popoverRect)]) {
[popCtrl presentPopoverFromRect:[[controller performSelector:@selector(popoverRect)] CGRectValue] inView:[controller view] permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
}
@end
在我的prepareForSegue方法中,我执行以下操作
if (isPad) {
self.popoverCtrl = [(UIStoryboardPopoverSegue *)segue popoverController];
if (nil == _popoverCtrl) {
self.popoverCtrl = [[UIPopoverController alloc] initWithContentViewController:[segue destinationViewController]];
((PopoverFromRectSegue *)segue).popoverCtrl = _popoverCtrl;
}
self.popoverRect = [NSValue valueWithCGRect:[self.myTableView rectForRowAtIndexPath:indexPath]];
}