我有一个带导航控制器的应用程序,当用户在特定视图中时,他可以触摸scollview,我想要推送rootViewController。所以,我有子类uiscrollview,在方法“touchesBegan”中,我想推送rootviewcontroller,但我没有访问导航控制器!我怎么能这样做?
答案 0 :(得分:1)
UIViewControllers有一个属性“navigationController”,所以你只需要访问被触摸视图的视图控制器。
然而,我发现在iphone开发中,跳过这样的箍是发展中的弱点的迹象。例如,为什么视图会告诉视图CONTROLLER执行某些操作。它应该是相反的方式。话虽这么说,UIViewController是UIResponder的子类,所以你可以处理控制器中的触摸。然后你可以简单地说。
[myViewController.navigationController pushViewController:animated:]
答案 1 :(得分:0)
在UIScrollView的子类中创建两个实例变量:
id delegate;
SEL touchAction;
然后创建方法:
-(void)setTarget:(id)target andAction:(SEL)action {
delegate = target;
touchAction = action;
}
-(void)callAction {
if (delegate && [delegate respondsToSelector:touchAction]) {
[delegate performSelector:touchAction];
}
}
在你的touchesBegan中只需调用此方法:
...
[self callAction];
...
在你的UIViewController类中创建方法:
-(void)myScrollViewTouchAction {
[self.navigationController pushViewController:myNewViewController animated:YES];
}
最后在创建UIScrollView子类的实例时,将其设置为target和action:
[myScrollView setTarget:self andAction:@selector(myScrollViewTouchAction)];