zoukankan      html  css  js  c++  java
  • 编写简单的导航控制器

    导航控制器(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,并且将这个控制器压栈到控制器栈中。运行程序,就是上面的效果。

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

  • 相关阅读:
    .NET 几种数据绑定控件的区别
    .NET 使用 Highcharts生成扇形图 柱形图
    使用Jquery1.9 版本 来实现全选
    30款jQuery常用网页焦点图banner图片切换
    MVC中使用MVCPager简单分页
    HttpWebRequest 以及WebRequest的使用
    C#中的事件机制
    如何向妻子解释OOD (转)
    linux 设置时间
    git 使用操作
  • 原文地址:https://www.cnblogs.com/Snowfun/p/2046341.html
Copyright © 2011-2022 走看看