IOS5基础之十四-----导航控制器和表视图--创建顶级视图

了解表视图之后,我们了解导航控制器,导航控制器和表视图没有必然的关联,但是在实际的运用当中他们是紧密相关的。

先了解一些基础知识。或者说是复习吧。

什么是栈? 

栈是一种常用的数据结构,采用后进先出的原则。可以理解我们把书一本一本的装到箱子里面,当我们取的时候是把最后放进去的书最先拿出来。

向栈中添加对象叫入栈(push)即把对象推到栈中。

第一个入栈的对象叫基栈。

最有一个入栈的对象叫栈顶。

从栈中删除对象的操作叫出栈(pop)。

这个导航项目由6个部分组成

1、展示按钮视图。2、校验表视图。3、行控制视图。4、可移动行视图。5、可删除行视图。6、可编辑详细信息视图。

接下来就创建项目。

创建的是以一个Empty Application创建的。

创建顶级视图

首先要创建一个顶级类命名为BIDFirstLevelController。然后在BIDAppDelegate头文件中添加代码如下:

#import <UIKit/UIKit.h>


@interface BIDAppDelegate : UIResponder <UIApplicationDelegate>


@property (strong, nonatomic) UIWindow *window;

@property (strong,nonatomic) UINavigationController *navController;//初始化一个导航条


@end


#import "BIDAppDelegate.h"

#import "BIDFirstLevelController.h"


@implementation BIDAppDelegate


@synthesize window = _window;

@synthesize navController;//实例化


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.

    BIDFirstLevelController *first=[[BIDFirstLevelController alloc]initWithStyle:UITableViewStylePlain];//这个方法可以用来创建一个普通的或时分组的的表视图控制器,而不用借助nib文件。

    self.navController=[[UINavigationController alloc] initWithRootViewController:first];//传递顶层控制器,导航控制器用它来初始化内容

    [self.window addSubview:navController.view];//它是由导航控制器所提供的符合视图,有两项组成,屏幕顶部的导航栏,以及下面所显示的内容

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    return YES;

}


其实这两个文件是最基础的初始化数据的时候必须加载的。所以导航条要添加在这里,它第一次就要出现的。

接下来创建内容视图的,BIDFirstLevelViewController,这个我们不会去创建实例,它单独的存在,我们便可以向接下来编写的其他控制器添加常规项目。可以理解为是一个抽象类。

实现代码如下:

#import <UIKit/UIKit.h>


@interface BIDFirstLevelController : UITableViewController


@property (strong,nonatomicNSArray *controllers;



@end


#import "BIDFirstLevelController.h"

#import "BIDSecondLevelViewController.h"


@implementation BIDFirstLevelController

@synthesize controllers;


-(void) viewDidLoad

{

    [super viewDidLoad];

    self.title=@"First Level";

    NSMutableArray *array=[[NSMutableArray alloc]init];//使用可变数组以迭代的方式添加新控制器。

    self.controllers=array;

}


-(void) viewDidUnload

{

    [super viewDidUnload];

    self.controllers=nil;

}


#pragma mark -

#pragma mark Table Data Source Methods

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section//返回数组控制器中的计数

{

    return [self.controllers count];

}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    static NSString *FirstLevelCell=@"FirstLevelCell";//充当表示某单元的键

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:FirstLevelCell];

    if (cell==nil) {

        cell=[[UITableViewCell allocinitWithStyle:UITableViewCellStyleDefault reuseIdentifier:FirstLevelCell];

    }

    NSUInteger row=[indexPath row];//需要知道表视图显示那些行

    BIDSecondLevelViewController *controller=[controllers objectAtIndex:row];

    cell.textLabel.text=controller.title;

    cell.imageView.image=controller.rowImage;

    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;

    return cell;

}


#pragma mark -

#pragma mark Table View Delegate Methods

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath//用户单击某行后调用的方法

{

    NSUInteger row=[indexPath row];

    BIDSecondLevelViewController *nextController =[self.controllers objectAtIndex:row];//从对应于该行的数组中获取正确的控制器

    [self.navigationController pushViewController:nextController animated:YES];//将下一个控制器从数组中取出,并放入到导航控制器栈中

}


@end

这样就可以运行了,效果如下:这样就是把导航条添加进去,由于数组为空所以只能看到空行。


由于最近比较忙,这个学习还是精力不足,缓慢前进,总比不动好,逆水行舟不进则退。我要努力。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值