模态视图控制器从自定义单元格选择问题中分离 - 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 中分离