Escucha es sólo la idea de lo que estoy pensando para implementar esto,

Quiero implementar libro como de las páginas, para esto quiero tomar UITableView y girar-90 grados y su célula de 90 grados, y ahora quiero subclase UITableViewCell, ahora dentro de este formato tableview celular es posible añadir UITableview así que el usuario puede desplazarse verticalmente para ver el contenido y el usuario también puede desplazarse horizontalmente para ir a la siguiente celda de girar en formato tableview.
Es sólo que estoy pensando, ¿hay alguna mejor manera de implementar esto.

  • ¿Cómo podría apoyar el reordenamiento a través de diferentes vistas de tabla?
InformationsquelleAutor Shankar BS | 2013-07-01

5 Comentarios

  1. 66

    sí es posible, he añadido el UITableVIew dentro de la UITableView celular
    .. 🙂

    no hay necesidad de agregar formato tableview de células en el archivo xib – sólo subclase de la UITableviewCell y utilizar el siguiente código, una célula será creado mediante programación.

    //in your main TableView 
    
    #import "ViewController.h"
    #import "CustomCell.h"
    @interface ViewController ()<UITableViewDataSource , UITableViewDelegate>
    @end
    @implementation ViewController
    - (void)viewDidLoad
    {
    [super viewDidLoad];
    //Do any additional setup after loading the view, typically from a nib.
     }
    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    //Dispose of any resources that can be recreated.
      }
    - (void)dealloc 
    {
    [_aTV release];
    [super dealloc];
    }
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    return 1;
    }
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    return 3;
    }
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    CustomCell *cell = [self.aTV dequeueReusableCellWithIdentifier:@"Cell"];
    if(cell == nil)
    {
    cell = [[[CustomCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]autorelease];
    }
    cell.dataAraay = [NSMutableArray arrayWithObjects:@"subMenu->1",@"subMenu->2",@"subMenu->3",@"subMenu->4",@"subMenu->5", nil];
    return  cell;
    }
    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    return 150;
    }
    //in your custom tableview cell 
    // .m file
    #import "CustomCell.h"
    @implementation CustomCell 
    @synthesize dataAraay; //array to hold submenu data
    
    - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
    {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
    //Initialization code
       self.frame = CGRectMake(0, 0, 300, 50);
    UITableView *subMenuTableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStylePlain]; //create tableview a
    
    subMenuTableView.tag = 100;
    subMenuTableView.delegate = self;
    subMenuTableView.dataSource = self;
    [self addSubview:subMenuTableView]; //add it cell
      [subMenuTableView release]; //for without ARC
      }
    return self;
    }
    - (void)setSelected:(BOOL)selected animated:(BOOL)animated
    {
    [super setSelected:selected animated:animated];
    //Configure the view for the selected state
     }
    -(void)layoutSubviews
    {
    [super layoutSubviews];
    UITableView *subMenuTableView =(UITableView *) [self viewWithTag:100];
    subMenuTableView.frame = CGRectMake(0.2, 0.3, self.bounds.size.width-5,    self.bounds.size.height-5);//set the frames for tableview
    
    }
    //manage datasource and  delegate for submenu tableview
     -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    return 1;
    }
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    return dataAraay.count;
    }
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];
    if(cell == nil)
    {
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellID"]autorelease];
    }
    cell.textLabel.text = [self.dataAraay objectAtIndex:indexPath.row];
    return cell;
    }
    @end

    Swift versión
    Crear un single view project agregar tableview dentro de storyboard y configurar su datasource y delegate

    Pegar el código de abajo para ViewController.swift

      import UIKit
    class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {
    override func viewDidLoad() {
    super.viewDidLoad()
    //Do any additional setup after loading the view, typically from a nib.
      }
    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    //Dispose of any resources that can be recreated.
      }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 3;
    }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 1;
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell:CustomCell? = tableView.dequeueReusableCellWithIdentifier("Cell") as?  CustomCell
    if cell == nil {
    cell = CustomCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
    }
    cell?.dataArr = ["subMenu->1","subMenu->2","subMenu->3","subMenu->4","subMenu->5"]
    return cell! 
    }
    func  tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return 150.0
    }
    }

    crear un nuevo archivo de CustomCell.swift que es la subclase de UITableViewCell y do not select with xib este archivo es sin .xib archivo table y su cell será creado mediante programación como en objective-c code.

    Pegar el código de abajo para CustomCell.swift

      import UIKit
    class CustomCell: UITableViewCell,UITableViewDataSource,UITableViewDelegate {
    var dataArr:[String] = []
    var subMenuTable:UITableView?
    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style , reuseIdentifier: reuseIdentifier)
    setUpTable()
    }
    required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
    setUpTable()
    }
    override func awakeFromNib() {
    super.awakeFromNib()
    //Initialization code
          setUpTable()
    }
    func setUpTable(){
    subMenuTable = UITableView(frame: CGRectZero, style:UITableViewStyle.Plain)
    subMenuTable?.delegate = self
    subMenuTable?.dataSource = self
    self.addSubview(subMenuTable!)
    }
    override func layoutSubviews() {
    super.layoutSubviews()
    subMenuTable?.frame = CGRectMake(0.2, 0.3, self.bounds.size.width-5, self.bounds.size.height-5)
    }
    override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)
    //Configure the view for the selected state
      }
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return dataArr.count
    }
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
    }
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell: UITableViewCell? = tableView.dequeueReusableCellWithIdentifier("cellID")
    if cell == nil {
    cell = UITableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "cellID")
    }
    cell?.textLabel?.text = dataArr[indexPath.row]
    return cell!
    }
    }
    • Hey Shan cómo delegar la vista de tabla dentro de una celda para storyboards?
    • ¿CustomCell necesidad de implementar UITableViewDataSource en orden para su cellForRowAtIndexPath para obtener llama?
    • sí para el formato tableview en el interior de la célula madre, es necesario confirmar la de delegar y de origen de datos , en el código anterior lo que estoy haciendo a través de programación por subMenuTableView.delegate = self y subMenuTableView.dataSource = self
    • de todos modos, usted puede escribir este código en swift.
    • agregar swift versión de verificación que
    • una posible opción sería el uso de delegado a la vista del controlador de celdas personalizado.
    • es en el interior de formato tableview desplazable?
    • son desplazables
    • Yo había intentado al ver tu respuesta me hubiera puesto de la tabla de la vista en sección separada en la que se me carga los datos de la api, pero el problema está en la primera sección, siempre que el botón de radio que permite que en ese momento la tercera sección necesita ser mostrado pero a la vez mostrando necesito llamar a la api de ¿cómo puedo llamar a la api y cargar los datos me pueden ayudar como hacer esto ? @ShankarBS
    • Cómo sobre el manejo de las aprovechado de la célula para ser manejado desde la vista principal
    • quería decir el manejo de la girada de acción de las células en el controlador de vista
    • Me refería a lo que si quiero manejar el toque de acción en la vista principal de la clase controlador, y no esta clase
    • usted puede definir un delegado personalizado de celdas personalizado a la vista de controlador para gestionar toque de acción
    • required init(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") setUpTable() } setUpTable() deben ser removidos aquí la causa de que no se ejecuta nunca.
    • es posible añadir una costumbre celda dentro de una vista de tabla que ya es una vista de tabla personalizada de vista de la célula?
    • sí, es posible personalizar el móvil.
    • Cuando se aprobó el modelo de instancia de su punto de vista celular(aquí) no está utilizando MVC más. También tenga en cuenta si su modelo es el de pasar por tipo de valor, las modificaciones no se reflejan cuando se copian..!
    • required init? causado el error fatal para mí. Trate de usar required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) }

  2. 9

    Mejor manera: el uso de un UIPageViewController por la izquierda/derecha desplazamiento de la página. Cada página puede contener una vista de tabla.

    • Ya gracias por la idea.. 🙂 -rob mayoff
  3. 6

    Aunque rob Idea es mejor, pero sí es posible. Comprobar cómo:

    Tomar 2 vista de tabla, darles etiqueta 1, 2, vamos a llamar a estos kTagBaseTableView, kTagInnerTableView. Ahora a continuación es el de blue print, cómo deat con dos vista de tabla, con el delegado y el origen de datos conectado a un solo controlador de vista.

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{              //Default is 1 if not implemented
        switch (tableView.tag) {
    case kTagBaseTableView:
    return baseSectionCount;
    break;
    case kTagInnerTableView:
    return innerSectionCount;
    break;
    default:
    break;
    }
    return 0;
    }
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    switch (tableView.tag) {
    case kTagBaseTableView:
    return [baseDataSource count];
    break;
    case kTagInnerTableView:
    return [innerDataSource count];
    break;
    default:
    break;
    }
    return 0;
    }
    //Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
    //Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = nil;
    switch (tableView.tag) {
    case kTagBaseTableView:{
    static NSString* baseIdentifier = @"baseTableViewCell";
    cell = [tableView dequeueReusableCellWithIdentifier:genderIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:genderIdentifier];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
    cell.textLabel.text = NSLocalizedString(titleKey, nil);
    return cell;
    }
    break;
    case kTagInnerTableView:{
    static NSString* innerIdentifier = @"innerTableViewCell";
    cell = [tableView dequeueReusableCellWithIdentifier:genderIdentifier];
    if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:genderIdentifier];
    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
    }
    cell.textLabel.text = NSLocalizedString(titleKey, nil);
    return cell;
    }
    default:
    break;
    }
    return cell;
    }
    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{    //fixed font style. use custom view (UILabel) if you want something different
        switch (tableView.tag) {
    case kTagBaseTableView:
    break;
    case kTagInnerTableView:
    break;
    default:
    break;
    }
    return nil;
    }
    //TABLE VIEW DELEGATE
    - (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    selectedIndexPath = indexPath;
    switch (tableView.tag) {
    case kTagBaseTableView:{}
    break;
    case kTagInnerTableView:{
    }
    break;
    default:
    break;}
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
    • Ya gracias por la detallada explicación . -rptwsthi
    • Si el contenido de la tabla interna depende de la tabla externa, ¿cómo saber qué fila de la tabla externa es seleccionado al caso de proceso las declaraciones de la kTagInnerTableView?
  4. 0
    #import "API.h"
    #import "Parsing.pch"
    #import "HomeViewController.h"
    #import "ASIFormDataRequest.h"
    #import "MBProgressHUD.h"
    #import "UIImageView+WebCache.h"
    #import "HomeCollectionViewCellForSubCat.h"
    #import "CollectionViewTableViewCell.h"
    #import "NewsTableViewCell.h"
    #import "CategoryTableViewCell.h"
    #import "HomeCollectionViewCellForSubCat.h"
    #import "WebviewController.h"
    #import "TopFreeAppsCollectionViewTableViewCell.h"
    #import "TopSitesCollectionViewTableViewCell.h"
    #import "TrandingVideoCollectionViewTableViewCell.h"
    #import "SportsTableViewCell.h"
    #import "JokesTableViewCell.h"
    @interface HomeViewController ()
    {
    MBProgressHUD *hud;
    NSMutableArray *Details;
    NSIndexPath *IndexPath;
    CollectionVIewTableViewCell *TrafficCell;
    NewsTableViewCell *NewsCell;
    CategoryTableViewCell *CategoryCell;
    TopFreeAppsCollectionViewTableViewCell *TopAppsCell;
    TopSitesCollectionViewTableViewCell *TopSitesCell;
    TrandingVideoCollectionViewTableViewCell *TrendingVideosCell;
    SportsTableViewCell *SportsCell;
    JokesTableViewCell *JokesCell;
    }
    @end
    NSString *More;
    NSMutableArray *news;
    @implementation HomeViewController
    - (void)viewDidLoad {
    [super viewDidLoad];
    //Do any additional setup after loading the view.
    
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.automaticallyAdjustsScrollViewInsets = NO;
    //[self.navigationController setNavigationBarHidden:YES];
    
    }
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
    return 1;
    }
    -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
    {
    return dataArray.count;
    }
    - (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    if([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"Traffic" ])
    {
    if(!TrafficCell)
    {
    TrafficCell = [tableView dequeueReusableCellWithIdentifier:@"CollectionVIewTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    TrafficCell.Traffic = [dict valueForKey:@"detail"];
    [TrafficCell.collectionView reloadData];
    return TrafficCell;
    }
    return TrafficCell;
    }
    else if([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"News"])
    {
    if(!NewsCell)
    {
    NewsTableViewCell *cell = (NewsTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"NewsTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    cell.News = [dict valueForKey:@"detail"];
    [cell.NewsTableView reloadData];
    return cell;
    }
    return NewsCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"TopApps"])
    {
    if(!TopAppsCell)
    {
    TopAppsCell = [tableView dequeueReusableCellWithIdentifier:@"TopFreeAppsCollectionViewTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    TopAppsCell.TopApps = [[dict valueForKey:@"detail"]valueForKey:@"small_banner"];
    [TopAppsCell.TopAppsCollectionView reloadData];
    return TopAppsCell;
    }
    return TopAppsCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"TopSites"])
    {
    if(!TopSitesCell)
    {
    TopSitesCell = [tableView dequeueReusableCellWithIdentifier:@"TopSitesCollectionViewTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    TopSitesCell.TopSites = [dict valueForKey:@"detail"];
    [TopSitesCell.TopSitesCollectionView reloadData];
    return TopSitesCell;
    }
    return TopSitesCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"Category"])
    {
    if(!CategoryCell)
    {
    CategoryCell= [tableView dequeueReusableCellWithIdentifier:@"CategoryTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    CategoryCell.Category = [dict valueForKey:@"detail"];
    [CategoryCell.CategorycollectionView reloadData];
    return CategoryCell;
    }
    return CategoryCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"TrendingVideos"])
    {
    if(!TrendingVideosCell)
    {
    TrendingVideosCell= [tableView dequeueReusableCellWithIdentifier:@"TrandingVideoCollectionViewTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    TrendingVideosCell.TrendingVideos = [[dict valueForKey:@"detail"]valueForKey:@"small_banner"];
    [TrendingVideosCell.VideosCollectionView reloadData];
    return TrendingVideosCell;
    }
    return TrendingVideosCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"Sports"])
    {
    if(!SportsCell)
    {
    SportsCell= [tableView dequeueReusableCellWithIdentifier:@"SportsTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    SportsCell.Sports = [dict valueForKey:@"detail"];
    [SportsCell.SportsTableView reloadData];
    return SportsCell;
    }
    return SportsCell;
    }
    else if ([[dataArray[indexPath.row] valueForKey:@"type"] isEqual:@"Jokes"])
    {
    if(!JokesCell)
    {
    JokesCell= [tableView dequeueReusableCellWithIdentifier:@"JokesTableViewCell" forIndexPath:indexPath];
    NSDictionary *dict=dataArray[indexPath.row];
    JokesCell.Jokes = [dict valueForKey:@"detail"];
    [JokesCell.JokesTableView reloadData];
    return JokesCell;
    }
    return JokesCell;
    }
    else
    {
    }
    return nil;
    }
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSDictionary *dict = dataArray[indexPath.row];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath: indexPath];
    if([dict[@"type"] isEqual:@"Traffic" ])
    {
    //Find your collectionView in cell
            //Tap on Traffic cells
        }
    else if([dict[@"type"] isEqual:@"News"])
    {
    //Tap on News cells
    
    }
    else if([dict[@"type"] isEqual:@"Category"])
    {
    //Tap on Category cells
    
    }
    else if([dict[@"type"] isEqual:@"TopApps"])
    {
    //Tap on TopApps cells
    
    }
    else if([dict[@"type"] isEqual:@"TopSites"])
    {
    //Tap on TopSites cells
    
    }
    else if([dict[@"type"] isEqual:@"TrendingVideos"])
    {
    //Tap on Trending cells
    
    }
    else if([dict[@"type"] isEqual:@"Sports"])
    {
    //Tap on Sports cells
    
    }
    else if([dict[@"type"] isEqual:@"Jokes"])
    {
    //Tap on Jokes cells
        }
    }
    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    NSDictionary *dict = dataArray[indexPath.row];
    if([dict[@"type"] isEqual:@"Traffic" ])
    {
    return 155;
    }
    else if([dict[@"type"] isEqual:@"News"])
    {
    return 300;
    }
    else if([dict[@"type"] isEqual:@"Category"])
    {
    return 120;
    }
    else if([dict[@"type"] isEqual:@"TopApps"])
    {
    return 180;
    }
    else if([dict[@"type"] isEqual:@"TopSites"])
    {
    return 240;
    }
    else if([dict[@"type"] isEqual:@"TrendingVideos"])
    {
    return 270;
    }
    else if([dict[@"type"] isEqual:@"Sports"])
    {
    return 310;
    }
    else if ([dict[@"type"] isEqual:@"Jokes"])
    {
    return 280;
    }
    return 200;
    }
    • Me han tratado de una manera sencilla espero que les guste.
    • muchas gracias por tu respuesta .. 🙂 anand

Dejar respuesta

Please enter your comment!
Please enter your name here