我正在尝试在ViewController
(第一个视图)和BrowserController
(第二个视图)之间创建自定义segue。
目前我有......
CustomSegue.h:
#import <UIKit/UIKit.h>
@interface CustomSegue : UIStoryboardSegue
@end
CustomSegue.m:
#import "CustomSegue.h"
@implementation CustomSegue
- (void)perform {
NSLog(@"Perform Method Running");
UIViewController *ViewController = (UIViewController *) self.sourceViewController;
UIViewController *BrowserController = (UIViewController *) self.destinationViewController;
NSLog(@"Starting duration...");
[UIView transitionWithView:ViewController.navigationController.view duration:0.2
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
NSLog(@"Animation section");
[ViewController.navigationController pushViewController:BrowserController animated:NO];
}
completion:NULL];
NSLog(@"Performance Method Completion");
}
单击按钮进入下一个视图时没有任何反应。
我将视图segue设置为“custom”(CTRL拖动)并将我的类定义为“CustomSegue”。我看到在CTRL和拖动之后有两个“自定义”选项可供选择 - 我已经尝试了这两个以防万一(并且我两次都重新定义了我的类),问题仍然存在。我还使用了NSLog
并看到正在调用perform
方法,我没有错误,但按钮仍然没有执行到下一个视图的segue(或任何segue)。
触发segue的按钮
- (IBAction)browserButton:(id)sender
这是我可以缩小到的最后一个区域......我是否需要向此IBAction
添加任何内容以告诉它使用新的segue?
答案 0 :(得分:2)
Xcode告诉你的是正确的:self
(当然属于CustomSegue
类型)既没有ViewController
也没有BrowserController
属性。这是因为您没有在CustomSegue
类中声明这些属性,并且其基类UIStoryboardSegue
也没有。{/ p>
您可以尝试两种解决方案 - 直接使用内置属性,或使用您想要的名称将它们包装在属性中。
这是第一种方法:
UIViewController *ViewController = (UIViewController *) self.sourceViewController;
UIViewController *BrowserController = (UIViewController *) self.destinationViewController;
这是第二种方法:
-(UIViewController*) ViewController {
return self.sourceViewController;
}
-(UIViewController*) BrowserController {
return self.destinationViewController;
}
第一种方法实施起来更快,但可能性较差。第二种方法需要更多的输入,但它为源和目标控制器提供了更好地描述其在应用程序中的角色的名称。选择取决于你。
答案 1 :(得分:1)
您无需对IBAction做任何事情。似乎一切都应该正常工作,你已经尝试了一切 - 我建议你删除工作(或者如果你使用github就回滚)并重新开始。从您添加CustomSegue
课程之前的那一点开始,并确保重新输入代码(您永远不会知道,有时您会抓住小细节)。
古德勒克。