Objective c UITableViewCell随自定义顺序上移显示/取消

Objective c UITableViewCell随自定义顺序上移显示/取消,objective-c,uitableview,ios8,uinavigationbar,segue,Objective C,Uitableview,Ios8,Uinavigationbar,Segue,我有一个MasterViewController,使用自定义模式segue,显示详细视图。自定义模态动画来自GitHub上的mluisbrown。目前,我遇到一个问题,导致tableview的单元格在选择时向上移动。 我不知道是什么原因造成的。显示详细视图的我的代码: -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ EditViewControlle

我有一个MasterViewController,使用自定义模式segue,显示详细视图。自定义模态动画来自GitHub上的mluisbrown。目前,我遇到一个问题,导致tableview的单元格在选择时向上移动。

我不知道是什么原因造成的。显示详细视图的我的代码:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    EditViewController *edit = [[EditViewController alloc]init];

    NSManagedObjectContext *mo = [_fetchedResultsController objectAtIndexPath:indexPath];
    [edit setManagedObjectContext:mo];



    id appDelegate= [[UIApplication sharedApplication] delegate];
    self.managedObjectContext = [appDelegate managedObjectContext];


    OweInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath];

    self.editView = edit;


    self.editView.delegate = self;
    self.editView.info = info;

    edit.info = info;
    edit.delegate = self;
    edit.managedObjectContext = [appDelegate managedObjectContext];



    self.editView.managedObjectContext = [appDelegate managedObjectContext];
[self performSegueWithIdentifier:@"pushToEdit" sender:self];



}
和我的密码:

if([segue.identifier  isEqual: @"pushToEdit"]){


        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        self.zoomTransition.sourceView = [self.tableView cellForRowAtIndexPath:indexPath];
               // pass the custom transition to the destination controller
        // so it can use it when setting up its gesture recognizers
        [[segue destinationViewController] setGestureTarget:self.zoomTransition];
    EditViewController *edit = segue.destinationViewController;

        NSManagedObjectContext *mo = [_fetchedResultsController objectAtIndexPath:indexPath];
        [edit setManagedObjectContext:mo];


        id appDelegate= [[UIApplication sharedApplication] delegate];
        self.managedObjectContext = [appDelegate managedObjectContext];


        OweInfo *info = [_fetchedResultsController objectAtIndexPath:indexPath];
            self.editView = edit;


        self.editView.delegate = self;
        self.editView.info = info;
    self.editView.managedObjectContext = self.managedObjectContext;
    edit.managedObjectContext = self.managedObjectContext;

        edit.info = info;
        edit.delegate = self;





    }
有人知道这是什么原因吗?这是在iOS 8和Xcode 6上实现的

它应该是什么样子的:

在我看来,您正在复制多个控制器

在didSelectRowAtIndexPath中,应该包含对segue的调用

然后仅创建viewController的一个实例

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier:@"pushToEdit" sender:self];
}

就是这样,您在segue委托中执行其余操作,并避免重复实例。

@meda它在gif中可能不明显,但UITableViewCell在转换到细节和返回时都会向上移动,而不是正常移动,但您是否遇到了实际的布局错误,或者您的意思是问题?我只能注意到右边的UIBarButton移动了一点bit@meda不,我意识到我的措辞在最初的评论中是错误的。UITableViewCell向上移动,这在该转换中不应发生。我将发布一个Gif,描述应该发生的事情。刚刚尝试过,仍在发生。请参阅post,了解它应该是什么样子的gif