2

enter image description hereDeux contrôleurs UITableView dans SplitViewController en iPad, délégué

Salut Ceci est ma première application iPad et d'essayer de transférer mon application iPhone pour iPad. J'ai suivi tous les tutoriels de http://www.raywenderlich.com/ ayant encore un problème.

examen a également cette question et ayant encore le problème. Fondamentalement, j'ai deux UITableViewControllers dans SplitViewController et quand je clique sur la cellule de vue de table dans le contrôleur de vue racine, je veux remplir les détails dans DetailsViewController dans le côté droit sur une autre vue de table.

Le problème est que je peux gérer pour transmettre les données du tableau de mais je ne peux pas appeler tableview méthode de rechargement.


Voici le code

LeftViewController

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    NSUInteger row = [indexPath row]; 

    if (row == 0){ 

     NSLog(@"Row 0 Pressed"); 

     RightViewController *rightvc = [self.storyboard instantiateViewControllerWithIdentifier:@"displayenglish"]; 

     _locallayleft = [ConversationDatabase database].conversationsInfos; 

     NSLog(@"Just pushed the array"); 

     rightvc.detailItem = _locallayleft; 
     rightvc.title = @"Greetings"; 


    } 

    else if (row == 1) { 
     NSLog(@"Row 1 Pressed"); 

     RightViewController *rightvc = [self.storyboard instantiateViewControllerWithIdentifier:@"displayenglish"]; 


     _locallayleft = [ConversationDatabase database].conversationsInfosgeneral; 

     rightvc.detailItem = _locallayleft; 
     rightvc.title = @"General Conversation"; 

    } 

----------------------------------------------------------------------------------------- 
RightViewController 


- (void)setDetailItem:(NSArray *)newDetailItem 
{ 

    if(_detailItem != newDetailItem) { 

     _detailItem = newDetailItem; 

     [self configureView]; 

    } 
} 


- (void)configureView 
{ 
    if (self.detailItem) { 


     self.locallay = self.detailItem; 

     _listOfCoversation = [[NSMutableArray alloc] init]; 
     for (ConversationInEnglish *c in _locallay) 

     { 
      NSString *english = c.english; 
      NSLog(@"setDetails Item get called"); 
      NSLog(@"%@",english); 

      [_listOfCoversation addObject:english]; 
     } 
     [self.tableView reloadData]; 
     NSLog(@"Trying to reload TableView"); 

    } 


} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self configureView]; 

} 






#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    return [_locallay count]; 

} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"English"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 

    ConversationInEnglish *con = _locallay [indexPath.row]; 
    _englishLabel = (UILabel *) [cell viewWithTag:200]; 

    _englishLabel.text = con.english; 
    NSLog(@"My data from cell %@",con.english); 

    [_englishLabel setFont:[UIFont fontWithName:@"Open Sans" size:22]]; 

    _myanmarLabel = (UILabel *) [cell viewWithTag:300]; 
    [_myanmarLabel setFont:[UIFont fontWithName:@"TharLon" size:17]]; 

    _tonebasedLabel = (UILabel *) [cell viewWithTag:400]; 
    _tonebasedLabel.text = con.tone_based; 


    UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"tableviewcell.png"]]; 

    self.tableView.backgroundColor = background; 

    return cell; 
} 

Répondre

1

On dirait que lorsque vous appuyez sur une ligne dans la table à gauche, au lieu de mettre à jour la table à droite, vous êtes instancier à la place une toute nouvelle table à partir du storyboard, mais sans remplacer celle de droite par celle-ci.

Il n'y a pas assez de contexte ici pour dire exactement comment le corriger, mais ce que vous voulez faire est quand vous tapez une rangée dans le tableau sur la gauche, mettez à jour la table sur la droite en définissant son detailItem propriété.

Vous aurez besoin d'un accès à l'autre point de vue de la table. Il y a quelques façons de le faire en fonction de la façon dont vous avez votre application mis en place - si vous utilisez la même vue de la table à gauche sur l'iPhone et l'iPad, alors vous aurez probablement besoin d'un code conditionnel pour le localiser, pour exemple:

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) { 
    DetailViewController *detailViewController = (DetailViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 
    detailViewController.detailItem = newDetailItem; 
} 

Ou vous pouvez le configurer via le storyboard. De toute façon, la clé est de trouver et de mettre à jour la vue de table existante au lieu d'en instancier une nouvelle à partir du storyboard.

+0

Vous n'avez pas besoin d'obtenir un pointeur sur votre contrôleur de vue partagé de cette façon depuis le contrôleur maître est intégré dans le contrôleur de vue partagé. Utilisez simplement self.splitViewController. – rdelmar

+0

Bon point - mis à jour le code pour refléter cela. Merci. – stevex

+0

Salut les gars. Merci beaucoup. La réponse est sur place. Ça marche. Yahoo! –

Questions connexes