不带故事板的iOS 3D Touch Peek/Pop

不带故事板的iOS 3D Touch Peek/Pop,ios,3d,touch,peek,Ios,3d,Touch,Peek,我正试图让peek/pop在一个非故事板Objective-C项目中工作,我一直使用白色背景,而不是模糊背景。我已经在模拟器和iPhone上试过了 - (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{ if ([self.presentedViewController i

我正试图让peek/pop在一个非故事板Objective-C项目中工作,我一直使用白色背景,而不是模糊背景。我已经在模拟器和iPhone上试过了

- (UIViewController *)previewingContext:(id<UIViewControllerPreviewing>)previewingContext viewControllerForLocation:(CGPoint)location{
if ([self.presentedViewController isKindOfClass:[LoadTreatmentDetailViewController class]]) {
    return nil;
}

NSIndexPath *indexPath = [self.loadTreatmentsTableView indexPathForRowAtPoint:location];

if(indexPath){
    AllTreatmentsTableViewCell *tableCell = [self.loadTreatmentsTableView cellForRowAtIndexPath:indexPath];

    if(tableCell.treatment){
        LoadTreatmentDetailViewController *previewController = [[LoadTreatmentDetailViewController alloc] initWithTreatment:tableCell.treatment withContext:self.context];
        if(previewController){
            previewController.preferredContentSize = CGSizeMake(0.0, 0.0);
            previewingContext.sourceRect = tableCell.frame;

            return previewController;
        }
    }
}
return nil;
}

- (void)previewingContext:(id<UIViewControllerPreviewing>)previewingContext commitViewController:(UIViewController *)viewControllerToCommit{
[self presentViewController:viewControllerToCommit animated:YES completion:nil];
}

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if([self isForceTouchAvailable]){
    if(!self.previewingContext){
        self.previewingContext = [self registerForPreviewingWithDelegate:self sourceView:self.view];
    }
}else{
    if(self.previewingContext){
        [self unregisterForPreviewingWithContext:self.previewingContext];
        self.previewingContext = nil;
    }
}
}

- (BOOL)isForceTouchAvailable {
BOOL isForceTouchAvailable = NO;
if([self.traitCollection respondsToSelector:@selector(forceTouchCapability)]){
    isForceTouchAvailable = self.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable;
}
return isForceTouchAvailable;
}
-(UIViewController*)previewingContext:(id)previewingContext viewControllerForLocation:(CGPoint)位置{
如果([self.presentedViewController是类:[LoadTreatmentDetailViewController类]]){
返回零;
}
NSIndexPath*indexPath=[self.loadTreatmentsTableView indexPathForRowAtPoint:location];
if(indexath){
AllTreatmentsTableViewCell*tableCell=[self.loadTreatmentsTableView cellForRowAtIndexPath:indexPath];
if(表细胞治疗){
LoadTreatmentDetailViewController*previewController=[[LoadTreatmentDetailViewController alloc]initWithTreatment:tableCell.treatment withContext:self.context];
if(预览控制器){
previewController.preferredContentSize=CGSizeMake(0.0,0.0);
previewingContext.sourceRect=tableCell.frame;
返回预览控制器;
}
}
}
返回零;
}
-(void)previewingContext:(id)previewingContext commitViewController:(UIViewController*)viewControllerToCommit{
[self-presentViewController:viewControllerToCommit动画:是完成:无];
}
-(void)traitCollectionDidChange:(UITraitCollection*)以前的TraitCollection{
[super traitCollectionDidChange:previousTraitCollection];
如果([自身可用]){
如果(!self.previewingContext){
self.previewingContext=[self-registerForPreviewingWithDelegate:self-sourceView:self.view];
}
}否则{
if(self.previewingContext){
[self unregisterForPreviewingWithContext:self.previewingContext];
self.previewingContext=nil;
}
}
}
-(BOOL)是否可用{
BOOL isForceTouchAvailable=否;
if([self.traitCollection respondsToSelector:@selector(forceTouchCapability)]){
isForceTouchAvailable=self.traitCollection.forceTouchCapability==UIForceTouchCapabilityAvailable;
}
返回是可用的;
}
可能吗


谢谢你的帮助

这是我用于Scrollview的UIAppearance

我想部分问题是我在应用程序中的一些UIAppearance代码有些模糊,但仍然有白色背景,而且我第一次按下tableviewcell时没有看到它。