Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义UIStoryboardPopoverSegue在iOS 5.1下无法工作_Ios_Uistoryboardsegue - Fatal编程技术网

自定义UIStoryboardPopoverSegue在iOS 5.1下无法工作

自定义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

我已经实现了一个自定义的故事板segue,它在iOS 6下运行良好,但在iOS 5.1下的模拟器中什么也没有发生。 问题是,在iOS 5.1下,popoverController总是为零

@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]];
  }