现在的位置: 首页 > 综合 > 正文

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

2017年10月25日 ⁄ 综合 ⁄ 共 3401字 ⁄ 字号 评论关闭

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

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

什么是栈? 

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

向栈中添加对象叫入栈(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

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

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

抱歉!评论已关闭.