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

ios-使用树形结构导航模式

2017年04月13日 ⁄ 综合 ⁄ 共 4787字 ⁄ 字号 评论关闭

// 树形结构导航模式

/*

 树形结构导航模式也是非常重要的导航模式,它将导航视图控制器(UINavigationController)与表视图(UITableView)结合使用,主要用于构建有从属关系的导航。这种导航模式采用分层组织信息的方式,可以帮助我们构建ios效率型应用程序

 */

代码实现如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    self.window.backgroundColor = [UIColor grayColor];
    [self.window makeKeyAndVisible];
    
    KFViewController *viewCtl = [[KFViewController alloc] init];
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewCtl];
    self.window.rootViewController = self.navigationController;
    [self.navigationController release];
    [viewCtl release];

    return YES;
    
    // 树形结构导航
    /*
     树形结构导航模型中,有两个根视图控制器:
     一个是应用程序的根视图控制器,它是UINavigationController的实例,通过self.window.rootViewController属性指定。
     另一个是导航控制器根视图控制器,它一般是UIViewController的实例,通过UINavigationController的构造方法
     initWithRootViewController:指定,用于提供和呈现导航控制器的一级视图,即我们看到的第一个界面。
     */
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor grayColor];
    
    mutArr = [[NSMutableArray alloc] initWithCapacity:20];
    for (int i = 0 ; i < 10 ; i ++)
    {
        NSString *str = [NSString stringWithFormat:@"苹果_%d",i];
        [mutArr addObject:str];
    }
    
    // 导航栏标题
    self.title = @"苹果";
    
    // 导航栏左边和右边按钮
    UIBarButtonItem *navLeftItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editClick:)];
    UIBarButtonItem *navRightItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneClick:)];
    self.navigationItem.leftBarButtonItem = navLeftItem;
    self.navigationItem.rightBarButtonItem = navRightItem;
    [navLeftItem release];
    [navRightItem release];
    
    [self initTableView];
}

#pragma mark - 初始化UITableView
- (void)initTableView
{
    m_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];  // 568
    m_tableView.backgroundColor = [UIColor whiteColor];
    m_tableView.delegate = self;
    m_tableView.dataSource = self;
    [self.view addSubview:m_tableView];
    [m_tableView release];
}

#pragma mark - UITableViewDelegate
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [mutArr count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *indentifier = @"myCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:indentifier];
    
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier] autorelease];
    }
    
    NSString *str = [mutArr objectAtIndex:[indexPath row]];
    cell.textLabel.text = str;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    int iRow  = [indexPath row];
    NSString *str = [mutArr objectAtIndex:iRow];
    
    DetailViewController *detailViewCtl = [[DetailViewController alloc] init];
    detailViewCtl.m_Title = str;
    [self.navigationController pushViewController:detailViewCtl animated:YES];
    [detailViewCtl release];
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!tableView.editing)
        return UITableViewCellEditingStyleNone;
    else {
        return UITableViewCellEditingStyleDelete;
    }
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    int iRow = [indexPath row];
    [mutArr removeObjectAtIndex:iRow];
    [tableView reloadData];
}

- (void)editClick:(id)sender
{
    m_tableView.editing = !m_tableView.editing;
}

- (void)doneClick:(id)sender
{
    m_tableView.editing = NO;
}

//
// DetailViewController.h
//
#import <UIKit/UIKit.h>

@interface DetailViewController : UIViewController <UIWebViewDelegate>

@property (copy, nonatomic) NSString *m_Title;

@end

//
// DetailViewController.m
//
#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController

- (void)dealloc
{
    [self.m_Title release];
    [super dealloc];
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = self.m_Title;
    
    [self intiUI];
}

- (void)intiUI
{
    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 416)];  // 568
    webView.backgroundColor = [UIColor clearColor];
    webView.delegate = self;
    [self.view addSubview:webView];
    [webView release];
    
    NSString *str = @"http://www.baidu.com";
    NSURL *url = [NSURL URLWithString:str];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSLog(@"finish");
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"%@",[error description]);
}


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

@end

至此,树形结构导航介绍已经完毕,程序运行效果图如下:

ios 6效果图:

      

ios 7效果图:

      

抱歉!评论已关闭.