我有一个 UITabelViewController
(mainViewCtrl),如果用户选择一个单元格,一个新的 UIViewController
(detailViewCtrl) 会被插入“场景”,其中包含一些细节有关所选单元格的数据。 - 很简单的东西。
如果用户摇动手机,(detailViewCtrl) 将显示一些随机的细节数据。
这是我的 prepareForSeque
代码:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"DetailViewSeque"])
{
int i;
if ([sender isKindOfClass:[UITableViewCell class]]){
UITableViewCell *cell = (UITableViewCell*)sender;
NSIndexPath *indexPath = [self.minifigsTableView indexPathForCell:cell];
i = indexPath.row;
}else{
i = arc4random() % [self.collectionOfData count];
}
DeatilViewController *dest = [segue destinationViewController];
dest.data = [self.collectionOfData objectAtIndex:i];
}
}
代码非常简单,没什么花哨的。我的问题是,如果用户在两个 ViewController(mainViewCtrl 和 detailViewCtrl)之间的转换正在进行时摇动手机,我将收到此错误:
开始/结束外观转换的调用不平衡。
我明白为什么这会导致问题。
但是我该如何解决呢?在转换处于事件状态时,如何以某种方式阻止 UIGestureEvent 被触发?
最佳答案
这就是我解决问题的方法。
首先我添加了:@property BOOL isInTransit;
然后我将 viewDidAppear
方法添加到我的代码中,并将 isIntransit
设置为 true
(viewDidAppear 将在转换结束后调用。 )
-(void)viewDidAppear:(BOOL)animated
{
self.isInTransit = true;
}
最后,我在 motionBegan
方法中添加了一个 if 语句,并在调用 preformeSegueWithIdentifier
之前将 isInTransit 设置为 false:
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventSubtypeMotionShake)
{
if (self.isInTransit){
self.isInTransit = false;
[self performSegueWithIdentifier:@"DetailViewSeque" sender:self];
}
}
}
感谢 Armand DOM 帮助我。
关于ios - 摇动手势并准备 seuge - 开始/结束外观转换的不平衡调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22897960/