2010-08-03 4 views
0

J'ai une applications avec un contrôleur de navigation, lorsque l'utilisateur est dans une vue spécifique, Il peut toucher un scollview et je veux pousser le rootViewController. Donc, j'ai sous-classes uiscrollview, et dans la méthode "touchesBegan", je veux un pousser le rootviewcontroller, mais je n'ai pas accès au contrôleur de navigation! Comment je peux faire ça?push view when touchesBegan

Répondre

0

Dans votre sous-classe de UIScrollView créer deux variables d'instance:

id delegate; 
SEL touchAction; 

Ensuite, créez des méthodes:

-(void)setTarget:(id)target andAction:(SEL)action { 
    delegate = target; 
    touchAction = action; 
} 
-(void)callAction { 
    if (delegate && [delegate respondsToSelector:touchAction]) { 
     [delegate performSelector:touchAction]; 
    } 
} 

Dans votre touchesBegan il suffit d'appeler cette méthode:

... 
[self callAction]; 
... 

Dans votre classe UIViewController méthode create:

-(void)myScrollViewTouchAction { 
    [self.navigationController pushViewController:myNewViewController animated:YES]; 
} 

et enfin lors de la création par exemple de votre sous-classe UIScrollView, réglez la cible et l'action:

[myScrollView setTarget:self andAction:@selector(myScrollViewTouchAction)]; 
+0

Je fais tout ces choses, mais quand cette ligne est exécutée : [delegate performSelector: touchAction], la méthode myScrollViewTouchAction n'est pas appelée, dans le nom initwithnib de mon contrôleur de vue, je crée une instance de la sous-classe uiscrollview et j'appelle setTarget .... – alex

+0

Le problème est que lorsque j'ai appelé setTarget et quand touchesBegan s'appelle, je t n'est pas le même objet, donc le délégué n'est pas défini lorsque touchesBegan est appelé ... – alex

+0

puis définissez la cible et l'action pour le nouvel objet. – jamapag

1

Les UIViewControllers ont la propriété "navigationController", il vous suffit donc d'accéder au contrôleur de vue de la vue en cours de modification.

Cependant, j'ai trouvé que dans le développement de l'iphone, sauter par des cerceaux comme ça est un signe de faiblesse dans le développement. Par exemple, pourquoi une vue doit indiquer à une vue CONTROLLER de faire quelque chose. Il devrait être l'inverse. Cela étant dit, UIViewController est une sous-classe de UIResponder, donc vous pouvez gérer les touches dans le contrôleur. Ensuite, vous pouvez simplement dire.

[myViewController.navigationController pushViewController: animé:]