2011-09-24 5 views
0

J'ai un UITableViewController que j'appelle de manière pragmatique dans ma vue d'ensemble en cas de besoin. Lorsque j'appuie sur une vue de table, je veux que l'information soit placée dans un UITextField. maintenant je peux l'obtenir pour se connecter correctement à partir de la vue d'ensemble mais le texte n'est jamais placé dans son champ correct.Envoi d'informations depuis UITableView vers SuperView

venant de la UITablViewController:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath 
{ 
    NSLog(@"Index %i Touched:",indexPath.row); 

    self.MainView = [[TwitterViewController alloc] init]; 
    self.MainView.view = super.view; 

    selectedFriend = [(Tweet*)[friends objectAtIndex:indexPath.row]followingScreenName]; 

    self.MainView.selectedFriendForTweet = self.selectedFriend; 

    [self.MainView setSelectedFriendInBody:self.selectedFriend 
             into:self.MainView.TweetBody 
             with:self]; 

    //NSLog(@"selected name on tblview = %@",selectedFriend); 
    self.MainView.TweetBody.text = self.selectedFriend; 
} 

que vous voyez ma méthode est appelée lorsqu'un utilisateur tape le tblview

[self.MainView setSelectedFriendInBody: self.selectedFriend en: self.MainView .TweetBody avec: self];

Voici la méthode: Maintenant, ce journal fonctionne et l'information est correcte, mais ne rentre pas dans le texte!

-(void)setSelectedFriendInBody:(NSString*)aString into:(UITextView*)atextView with:(id)sender 
{ 
    aString = friendsTbl.selectedFriend; 
    friendsTbl.selectedFriend = self.selectedFriendForTweet; 
    atextView = self.TweetBody; 

    [self.TweetBody setText:selectedFriendForTweet]; 

    NSLog(@"superviews name = %@", selectedFriendForTweet); 
    [selectedFriendForTweet retain]; 
} 

Toute aide serait grandement appréciée! Merci

Répondre

1

vous faites des choses étranges dans votre code. Juste un exemple: votre méthode setSelectedFriendInBody:into: obtient deux paramètres que vous n'utilisez pas dans votre implémentation. Pire encore: vous assignez des valeurs à ces paramètres qui n'ont absolument aucun effet. Il doit y avoir STH mal ... votre code ne STH comme ceci:
a=2; b=3; c=10; d=20;
=> f(x,y)=c+d => f(a,b)=30

Et il est une mauvaise idée (par rapport à la réutilisabilité) pour forcer le superview est une vue particulière. La bonne façon de faire est d'utiliser le delegate-pattern. Il suffit de définir un protocole qui doit contenir votre méthode setSelectedFriendInBody:into: et implémenter ce protocole dans votre MainView. Le TablView obtient seulement et appelle un délégué (un identifiant qui implémente le protocole).

@protocol MyTablViewDelegate 
-(void)setSelectedFriendInBody:(NSString*)aString; 
@end 

@interface MyTablView : UITableView<UITableViewDelegate> 
{ 
    id<MyTablViewDelegate> myDelegate; 
} 
@property (assign) id<MyTablViewDelegate> myDelegate; //I use assign here for avoiding mem-leaks due to circular retain-chains 
@end 

@implementation MyTablView 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    .... 
    NSString *someString = [(Tweet*)[friends objectAtIndex:indexPath.row]followingScreenName]; 
    NSLog(@"someString: %@", someString); // maybe there is an error in getting that object from array or in followingScreenName 

    [self.myDelegate setSelectedFriendInBody: someString]; 

} 
@end 


@interface MainView : UIView<MyTablViewDelegate> 
... 
@end 

@implementation MainView 
... 
-(void) sthAtLoadTime 
{ 
    MyTablView *mySubView = [[MyTablView alloc] init...]; 
    mySubView.myDelegate = self; 
} 
-(void)setSelectedFriendInBody:(NSString*)aString 
{ 
    if(!self.TweetBody) 
     NSLog(@"ERR: TweetBody not set"); 
    self.TeetBody.text = aString; 

} 
@end 

Remarque Une autre chose: Je suppose que votre myTablView met également en œuvre le UITableViewDelegatewhich is also not the best way to do

cela devrait faire le travail.

+0

merci pour la réponse! J'essaye ceci dehors maintenant et il n'envoie pas l'information par le délégué. Tout fonctionne aussi loin que les délégués vont et peuvent utiliser l'instruction void de la vue principale mais elle n'est jamais appelée quand la vue de table est sélectionnée. c'est ce qui obtient 2011-09-24 19: 02: 05.278 ThemeCatcher [11717: 607] someString: AboutManagement 2011-09-24 19: 02: 06.396 ThemeCatcher [11717: 607] Index 10 touché: 2011-09-24 19: 02: 06.398 ThemeCatcher [11717: 607] someString: Ech0riginal 2011-09-24 19: 02: 07.866 ThemeCatcher [11717: 607] Index 12 Touché: – FreeAppl3

+0

avez-vous défini le délégué à l'implémentation? Je veux dire la ligne 'mySubView.myDelegate = self;' et cet extrait de code est-il appelé? et êtes-vous sûr que la méthode delegate n'est pas déclenchée? S'il vous plaît tester avec plus de NSLogs ou Breakpoints. – thomas

+0

Oui juste une double vérification avec les points d'arrêt et les journaux. tout semble fonctionner jusqu'à ce que les méthodes réelles de délégué doivent être appelées! Le NSLog (@ "ERR: TweetBody non défini"); Ne se produit jamais! Je place des journaux et des points d'arrêt là-bas et il n'est jamais appelé? Je reçois un point d'arrêt sur [self.delegate setSelectedFriendInBody: selectedFriend]; mais pas dans la méthode déléguée vide superview – FreeAppl3

Questions connexes