2017-06-01 1 views
0

J'ai créé un UIViewController avec ContainerView qui contient un UITableViewController. Dans la méthode ViewDidLoad() de ParentViewController, je définis la relation parent-enfant entre les deux viewConrollers.UITableView imbriqué dans ContainerView ne pas en surbrillance

guard let childView = childViewController.view else { 
      return 
     } 
    addChildViewController(childViewController) 

    containerView.addSubview(childView) 
    ... add constraints ... 
    childViewController.didMove(toParentViewController: self) 

Le UITableViewController est présenté dans ContainerView. Il défile correctement, mais les cellules ne sont pas mises en surbrillance lorsqu'elles sont engagées. Plus précisément, l'animation où ils changent de teinte ne se produit pas. Les méthodes déléguées

-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    return true; 
} 

-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSLog(@"Oh no you didn't!"); 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // stuff.. 
} 

s'exécutent toutes mais la couleur de la cellule ne change jamais.

J'ai regardé le gestureRecognizers sur le UITableView, et ils semblent être dans l'ordre, ce que vous attendez étant donné que les méthodes de délégué sont déclenchées. J'ai également exécuté ceci dans le simulateur et sur mon iPhone, et j'ai observé le même comportement sur tous les deux.

+0

se trouve que c'était juste quelque chose de stupide, je vis à vis, voir ci-dessous la réponse par @phamot. N'hésitez pas à voter pour cette question, car il s'est avéré ne pas avoir rien à voir avec l'imbrication de la TVC dans le ContainerView ou rapide 3 après tout – TMin

Répondre

1

Swift 3.0:

Vous devez définir Vous devez faire autre chose le style de sélection des cellules

cell.selectionStyle = .default

+0

Mieux vérifier que ... 1) Le code affiché dans la question est Objectif- C, pas Swift, et 2) Je ne pense pas que ce soit vrai dans Swift 3.0 de toute façon. – DonMag

+0

Merci, le projet est à la fois objectif-C et Swift-3. La source de données est dans Obj-c. Merci pour l'aide. – TMin

0

pour que les lignes à ne pas mettre en évidence. Je l'ai juste essayé, à la fois avec "l'automatiser" via Storyboard UIContainerView et en chargeant et en ajoutant manuellement la vue "contenue". Il l'a également fait avec les classes Swift et Objective-C UITableViewController.

Lignes tapées mises en surbrillance et non mises en surbrillance comme prévu.


// 
// ManualContainerViewController.swift 
// 

import UIKit 

class ManualContainerViewController: UIViewController { 

    @IBOutlet weak var containerView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if true { 
      //use swift table view controller 

      if let childViewController = storyboard?.instantiateViewController(withIdentifier: "containedTableVC") as? ContainedTableViewController { 

       guard let childView = childViewController.view else { return } 

       addChildViewController(childViewController) 

       containerView.addSubview(childView) 

       childView.translatesAutoresizingMaskIntoConstraints = false 

       childView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 0.0).isActive = true 
       childView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: 0.0).isActive = true 
       childView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 0.0).isActive = true 
       childView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: 0.0).isActive = true 

       childViewController.didMove(toParentViewController: self) 

      } 

     } else { 
      // use Objective-C table view controller 

      if let childViewController = storyboard?.instantiateViewController(withIdentifier: "oc_containedTableVC") as? OCContainedTableViewController { 

       guard let childView = childViewController.view else { return } 

       addChildViewController(childViewController) 

       containerView.addSubview(childView) 

       childView.translatesAutoresizingMaskIntoConstraints = false 

       childView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: 0.0).isActive = true 
       childView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: 0.0).isActive = true 
       childView.topAnchor.constraint(equalTo: containerView.topAnchor, constant: 0.0).isActive = true 
       childView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor, constant: 0.0).isActive = true 

       childViewController.didMove(toParentViewController: self) 

      } 

     } 

    } 

} 

// 
// ContainedTableViewController.swift 
// 

import UIKit 

class ContainedTableViewController: UITableViewController { 

    override func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 30 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "basicCell", for: indexPath) 

     cell.textLabel?.text = "\(indexPath)" 

     return cell 
    } 

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     tableView.deselectRow(at: indexPath, animated: true) 
    } 

} 

// 
// OCContainedTableViewController.h 
// 

#import <UIKit/UIKit.h> 

@interface OCContainedTableViewController : UITableViewController 

@end 

// 
// OCContainedTableViewController.m 
// 

#import "OCContainedTableViewController.h" 

@interface OCContainedTableViewController() 
@end 

@implementation OCContainedTableViewController 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return 30; 
} 

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

    cell.textLabel.text = [NSString stringWithFormat:@"Section: %ld/Row: %ld", (long)indexPath.section, (long)indexPath.row]; 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 
} 

@end