2017-06-03 59 views
-1

我开始写一个应用程序,以显示下面的数据结构:目标C:自动创建查看/从的ViewController数据结构

  • 类别#0
    • 子类别#0.0
      • 编号0.0.0
        • 商品描述
      • ...
      • 编号0.0.n
    • ...
    • 子目录#0.N
  • ...
  • 类别#N

换言之,有子类别的类别,其中可能会包含su bcategories以及等等。最后的子类别包含项目列表,点击后应显示简短的说明。

我正在考虑设计,就像iPhone上的本机设置应用程序。一切都包含在导航控制器中,并显示第一类。点击后,显示一个新的视图显示子类别。这一直持续到单击一个项目并显示说明。

我想知道如何去实现这一点。

  1. 什么是可靠的,可扩展的方式来存储数据(如上所述)。我不想将数据硬编入NSStringNSDictionaryNSDictionary。也许像JSON然后使用解析器,将数据写入NSDictionary
  2. 所有视图/ ViewControllers具有相同的性质(可能除了显示描述的最终控制器)。他们显示类别列表并保存数据以创建更深一步的VC 。但是,一个VC如何以编程方式创建另一个VC并显示它?我确定有一种更优雅的方式。

回答

0

你可以用你喜欢的任何格式存储数据,例如XML或JSON是好的,主要的是考虑一个舒适的结构,如index = data。您可以从以前的VC将数据传递到下一个,并跟踪其指标

然后你就可以按如下方式使用它:

根视图控制器具有导航控制器

#import "ViewController.h" 
#import "DetailViewController.h" 

@interface ViewController() 
@property (strong, nonatomic) IBOutlet UIButton *navButton; 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
} 

- (IBAction)navigate:(UIButton *)sender 
{ 
    DetailViewController *vc = [DetailViewController new]; 
    vc.prevIndex = 0; 
    vc.dataString = @"data"; 
    vc.view.backgroundColor = [UIColor whiteColor]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

@end 

DetailViewController - 用于显示子类别/物品

DetailViewController。^ h

@interface DetailViewController : UIViewController 

@property (nonatomic, assign) NSInteger prevIndex; 
@property (nonatomic, strong) NSString *dataString; 

@end 

DetailViewController.m

#import "DetailViewController.h" 

@implementation DetailViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 100, 0, 0)]; 
    [button setTitle:[NSString stringWithFormat:@"navigate from %li", (long)_prevIndex] forState:UIControlStateNormal]; 
    [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(navigate) forControlEvents:UIControlEventTouchUpInside]; 
    [button sizeToFit]; 
    [self.view addSubview:button]; 
} 

- (void)navigate 
{ 
    DetailViewController *vc = [DetailViewController new]; 
    vc.prevIndex = _prevIndex + 1; 
    vc.dataString = [NSString stringWithFormat:@"data %li", (long)vc.prevIndex]; 
    vc.view.backgroundColor = [UIColor whiteColor]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

@end