模态视图控制器从自定义单元格选择问题中分离 - iOS 7

Posted

技术标签:

【中文标题】模态视图控制器从自定义单元格选择问题中分离 - iOS 7【英文标题】:Modal view controller segue from custom cell selection issue - iOS 7 【发布时间】:2014-05-15 22:31:12 【问题描述】:

我最近在我的应用程序中注意到了这个问题,这似乎是一个异常现象,因为我无法确定它是如何/为什么会发生的,也无法预测何时发生。我有一个自定义的UITableViewCell 正在加载到我的UITableView 子类中。我的tableView 中始终只有 5 个单元格,它们是静态的,而不是原型。我遇到的问题是,在我关闭一个模式视图后,我选择了一个单元格,其他单元格变得有问题。这是发生了什么:

•我触摸单元格,它按计划执行转场

•在我触摸单元格后大约 10 多秒后执行 segue

•我触摸单元格并没有任何反应,但如果我触摸视图上的其他任何位置,则会执行转场

这也与“Here”发布的问题非常相似。

这是我的代码:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    
        //[super tableView:tableView didSelectRowAtIndexPath:indexPath];
        //self.selectedObject = [self.objects objectAtIndex:indexPath.row];
        NSLog(@"I DID SELECT path %ld", (long)indexPath.row);
        [self.tableView deselectRowAtIndexPath:indexPath animated:YES];

        if(indexPath.row == 0 && self.matchOneSetNum <= 3)
        
            self.whereFrom = 1;
            [self performSegueWithIdentifier:@"enterScoresSegue" sender:self];
        

        if(indexPath.row == 1 && self.matchTwoSetNum <= 3)
        
            self.whereFrom = 2;
            [self performSegueWithIdentifier:@"enterScoresSegue" sender:self];
        

        if(indexPath.row == 2 && self.matchThreeSetNum <= 3)
        
            self.whereFrom = 3;
            [self performSegueWithIdentifier:@"enterScoresSegue" sender:self];
        

        if(indexPath.row == 3 && self.matchFourSetNum <= 3)
        
            self.whereFrom = 4;
            [self performSegueWithIdentifier:@"enterScoresSegue" sender:self];
        

        if(indexPath.row == 4 && self.matchFiveSetNum <= 3)
        
            self.whereFrom = 5;
            [self performSegueWithIdentifier:@"enterScoresSegue" sender:self];
        


    

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender


    if([segue.identifier isEqualToString:@"enterScoresSegue"])
    
        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
        UINavigationController *newView = (UINavigationController *)[segue destinationViewController];
        EnterScoresViewController *enter = newView.topViewController;
        enter.myDelegate = self;
        enter.otherTeam = self.otherTeam;

        if(self.whereFrom == 1)
        

            enter.match = self.matchOne;
            enter.setNumber = self.matchOneSetNum;
            enter.matchOnePlayer = self.playerName;
        

        if(self.whereFrom == 2)
        

            enter.match = self.matchTwo;
            enter.setNumber = self.matchTwoSetNum;
            enter.matchTwoPlayer = self.playerNameTwo;
        

        if(self.whereFrom == 3)
        

            enter.match = self.matchThree;
            enter.setNumber = self.matchThreeSetNum;
            enter.matchThreePlayer = self.playerNameThree;
        

        if(self.whereFrom == 4)
        

            enter.match = self.matchFour;
            enter.setNumber = self.matchFourSetNum;
            enter.matchFourPlayers = self.playerStringsFour;
        

        if(self.whereFrom == 5)
        

            enter.match = self.matchFive;
            enter.setNumber = self.matchFiveSetNum;
            enter.matchFivePlayers = self.playerStringsFive;
        
    


【问题讨论】:

您能发布一些代码来帮助我们解决您的问题吗? 当然,很抱歉! 未来,您可能需要查看How to Ask,了解有关如何提出重要问题的更多提示。 好的,我发布了我的代码。而且,谢谢,我会看看未来的问题...... 你的 segues 是从单元连接还是从控制器连接? 【参考方案1】:

有一个类似问题的答案为我解决了这个问题,这是链接:https://***.com/a/23747207/2584268

这是全文:

填写雷达后,Apple 回复并添加:

dispatch_async(dispatch_get_main_queue(), ^);

到以下方法的末尾,它可以解决问题:

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

在呈现控制器的方法中,您可以安排无操作 块将强制 runloop 旋转并且不会有延迟。

雷达参考:15196237,请随时提交另一个并参考此。

【讨论】:

【参考方案2】:

wendrring 如果您从单元格或 ViewController(在这种情况下发送者是自己)在情节提要中继续,如果来自单元格,则发送者也应该是一个单元格。

[self performSegueWithIdentifier:@"enterScoresSegue" sender:[self.tableView cellForRowAtIndexPath:indexPath]];

【讨论】:

segue 来自视图控制器

以上是关于模态视图控制器从自定义单元格选择问题中分离 - iOS 7的主要内容,如果未能解决你的问题,请参考以下文章

将数组从自定义单元格发送到另一个视图控制器

如何在 Swift 中将值从自定义单元格设置/传递到视图控制器

如何从自定义表格视图单元类中获取对表格视图控制器的引用

通过点击单元格内的图像从 UITableViewCell 中分离

如何从自定义集合视图单元(使用 xib 创建的单元)到 tabBar 控制器创建自定义 segue

Swift - 从自定义单元格传递数据