编写简单的导航控制器

导航控制器(UINavigationController)是iOS界面中重要的组成部分。一般来说导航控制器要结合TableView来使用,因此我在摸导航控制器前先写了简单的TableView(编写简单的TableView),下面的例子也是在这个例子基础上写的。

本文是参考《iPhone开发基础教程》写的,但是这部分教程太啰嗦了。我做了精简,并拆分成几个渐进的小例子。第一个例子截图:

image image

首先,要创建Navigation-based Application:

image

这样,xcode会帮你生成一个导航项目的框架。xcode生成的RootViewController实际上是一个UITableViewController,这和编写简单的TableView是很类似的。

可以在IB中找到MainWindow.xib,为导航首页增加标题:

image

然后,和TableView类似,编写dataSource,不过不需要通过IB做关联到file’s owner了。只需要在RootViewController中“填空”即可,头文件中:

@interface RootViewController : UITableViewController <UITableViewDelegate,UITableViewDataSource>{
    NSArray *dataItems;

在m文件:

@synthesize dataItems;

- (void)viewDidLoad {
    [super viewDidLoad];

    dataItems= [[NSArray alloc] initWithObjects:@"张三",@"李四",nil];
    [super viewDidLoad];
}

// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [dataItems count];
}

另外,为了做出这个如下的效果:

image

需要再增加一个函数:

-(UITableViewCellAccessoryType)tableView:(UITableView *)tableView accessoryTypeForRowWithIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellAccessoryDetailDisclosureButton;
}

这时还没有牵扯到导航控制器的主要内容,只是做了个TableView而已。

创建详细内容的控制器,DetailViewController以及对应的xib文件。需要注意的是要在IB中做控制器到视图之间的关联工作。

然后,将DetailViewController设置为RootViewController的成员:

@interface RootViewController : UITableViewController <UITableViewDelegate,UITableViewDataSource>{
    NSArray *dataItems;
    DetailViewController *detailViewController;
}

之后,回到RootViewController.m文件中,增加用于处理列表按钮的函数:

-(void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
    if (detailViewController==nil) {
        detailViewController=[[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
    }
    detailViewController.title=@"Detail";
    NavTestAppDelegate *delegate=[[UIApplication sharedApplication] delegate];
    [delegate.navigationController pushViewController:detailViewController animated:YES];
}

 

在该函数中初始化了DetailViewController,并且将这个控制器压栈到控制器栈中。运行程序,就是上面的效果。

这里要注意,本例中选中条目并不会到详细页面,而必须点击图标按钮才行。

你可能感兴趣的:(控制器)