我有一个有 2 个场景的故事板。每个场景都有一个 segue ctrl+从 ViewController 图标拖到另一个场景。从第一个视图到第二个视图的 Segue 具有标识符“left”,从第二个到第一个 - “right”,两个 Segue 都指向从 UIStoryboardSegue 继承的同一个自定义类。每个 ViewController 在 Attribute Inspector 中都有一个标题,并且还没有为它们分配任何自定义类。
在 AppDelegate 中,我为所有 4 个方向设置了 UISwipeGestureRecognizer,如果当前视图控制器具有标识符为“left”、“right”、“up”或“down”的 segue,它会触发 performSegueWithIdentifier:
- (void) handleSwipe:(UISwipeGestureRecognizer *) recognizer {
NSString *direction;
switch ([recognizer direction]) {
case UISwipeGestureRecognizerDirectionLeft:
direction = @"left";
break;
case UISwipeGestureRecognizerDirectionUp:
direction = @"up";
break;
case UISwipeGestureRecognizerDirectionDown:
direction = @"down";
break;
default:
direction = @"right";
break;
}
@try {
UIViewController *rootVC = self.window.rootViewController;
[rootVC performSegueWithIdentifier:direction sender:rootVC];
} @catch (NSException *e) {
NSLog(@"Segue with identifier <%@> does not exist", direction);
}
}
在我的自定义 Segue 类中,我重写了“执行”方法,如下所示(没什么特别的,因为它会按原样中断,但我自然会重写它以便以后能够为 segues 自定义动画):
-(void) perform {
UIViewController *src = (UIViewController *) self.sourceViewController;
UIViewController *dst = (UIViewController *) self.destinationViewController;
NSLog(@"source: %@, destination: %@", src.title, dst.title);
[src presentModalViewController:dst animated:NO];
}
但是,它只在第一次向左滑动时有效,之后什么也没有发生。我可以通过“执行”方法中的 NSLog 看到 segue 的源视图控制器和目标视图控制器在第一次转换后由于某种原因没有改变,并且保持不变。看起来我错过了一些简单的东西,但我无法弄清楚。
不要对我太苛刻 ;) ,我是 iOS 开发的新手。