IOS-UITabView示例

总结

本章主要简示了UITabView得使用方法,使用UITabViewController的三个页面演示不同情况,包括简单的表格,分段带副标题风格的表格以及索引表格。

运行结果

工程构建概要

1.UITabViewController的使用方法可参考以前的文章

2.使用UITabView的控制类必须实现该控件对应的数据源和代理的方法,同时需要在IB里面指定UITabView的数据源和代理为该界面的控制类。

3.主要实现的方法有有几个段,每个段的行数,每个单元格怎么绘制,段标题是什么,如果需要索引的话,还得实现索引标题,点击索引标题定位到段。

4.因为本工程没有使用ARC,所以一开始有内存管理的问题,主要是成员变量赋值的时候是浅拷贝。正确的使用方法是self._value = value,而不是_vale = value,前者会调用设置方法,而后者只是指针赋值。

主要代码及注释

h文件

//
//  IndexViewController.h
//  TableViewDemo
//
//  Created by arbboter on 14/12/5.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface IndexViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
{
    NSMutableArray* _arraySection;
    NSMutableArray* _arrayMember;
    NSArray* _arrayIndex;
}

@property (nonatomic, retain) NSMutableArray* _arraySection;
@property (nonatomic, retain) NSMutableArray* _arrayMember;
@property (nonatomic, retain) NSArray* _arrayIndex;
@end

m文件

//
//  IndexViewController.m
//  TableViewDemo
//
//  Created by arbboter on 14/12/5.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import "IndexViewController.h"

@implementation IndexViewController

@synthesize _arrayMember;
@synthesize _arraySection;
@synthesize _arrayIndex;

#pragma UITableViewDataSource<NSObject>
// 对应段的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSInteger ret = 0;
    ret = [[_arraySection objectAtIndex:section] count];
    return ret;
}

// 绘制单元格
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell* cell = nil;
    static NSString *CellIdentifier = @"Cell1";

    cell = (UITableViewCell*)[tableView  dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle  reuseIdentifier:CellIdentifier] autorelease];
    }

    cell.textLabel.text = [[_arraySection objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];
    cell.imageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"%@.png", [_arrayIndex objectAtIndex:indexPath.section]]];
    return cell;
}

// 索引标题列表
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    NSMutableArray* index  = [[NSMutableArray alloc] init];

    for (int i='0'; i<='9'; i++)
    {
        [index addObject:[NSString stringWithFormat:@"%c", i]];
    }

    for (int i='A'; i<='Z'; i++)
    {
        [index addObject:[NSString stringWithFormat:@"%c", i]];
    }

    self._arrayIndex = index;
    [index release];
    return _arrayIndex;
}

// 点击索引标题定位到段
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    return index;
}
// 分段数
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
{
    return [_arraySection count];
}

// 返回段标题
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [_arrayIndex objectAtIndex:section];
}

#pragma UITableViewDelegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString* strRow = nil;

    NSArray* array = [_arraySection objectAtIndex:indexPath.section];
    strRow = [array objectAtIndex:indexPath.row];

    NSString* msg = [[NSString alloc] initWithFormat:@"你选择了-%@", strRow];
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"提示" message:msg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

    [alert show];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    [msg release];
    [alert release];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    NSMutableArray* arrayIndex = [[NSMutableArray alloc] init];

    // 数字名
    for (char i='0'; i<='9'; i++)
    {
        int nMem = arc4random()%7+4;
        NSMutableArray* arrayMem = [[NSMutableArray alloc] init];
        for (int j=0; j<nMem; j++)
        {
            [arrayMem addObject:[NSString stringWithFormat:@"%c%c%c", i, arc4random()%10+'0', arc4random()%10+'0']];
        }
        [arrayIndex addObject:arrayMem];
    }

    // 字母名
    for (char i='A'; i<='Z'; i++)
    {
        int nMem = arc4random()%7+4;
        NSMutableArray* arrayMem = [[NSMutableArray alloc] init];
        for (int j=0; j<nMem; j++)
        {
            [arrayMem addObject:[NSString stringWithFormat:@"%c%c%c", i, arc4random()%26+'a', arc4random()%26+'a']];
        }
        [arrayIndex addObject:arrayMem];
    }

    self._arraySection = arrayIndex;
    self._arrayMember = [arrayIndex objectAtIndex:0];
    [arrayIndex release];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc
{
    for (int i=0; i<_arraySection.count; i++)
    {
        [[_arraySection objectAtIndex:i] release];
    }
    [_arraySection release];
    [_arrayMember release];
    [super dealloc];
}

@end

工程代码下载

时间: 2024-10-13 07:31:58

IOS-UITabView示例的相关文章

iOS block示例

// // block.h // Block // // Created by tqh on 15/4/12. // Copyright (c) 2015年 tqh. All rights reserved. // #import <Foundation/Foundation.h> typedef void(^block1) (id obj); typedef void(^block2)(); typedef NSInteger(^block3)(); @interface block : N

iOS UITabView简写瀑布流

代码demo 一.tabViewCell,通过image的比例高算出cell 的高度 #import "TableViewCell.h" @implementation TableViewCell { UIImageView *imageView; } - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { self = [super initWithSt

iOS之UI--彩虹动画进度条学习和自主封装改进

前言: 首先展示一下这个iOS小示例的彩色进度条动画效果: 阅读本文先说说好处:对于基础不好的读者,可以直接阅读文末尾的"如何使用彩虹动画进度条"章节,然后将我封装好的这个功能模块类用到你的工程项目中即可. 这个效果的示例是老外Nick Jensen在2013年写的一个作品:使用CAGradientLayer的动画精度条View. 本人阅读了老外的源码之后,觉得老外这个进度条的效果很不错,但是觉得他写的代码有待改进. 小贴士:读者可以直接将老外的源码下载下来,跑一下,然后对比本人写的博

ios学习常用网站

iphone开发资源汇总: http://blog.csdn.net/devday/article/details/6664970 快乐开发: http://blog.sina.com.cn/s/articlelist_2455150881_0_2.html IOS TextField用法大全: http://godloong.blog.51cto.com/8652474/1388908 IOS开发者论坛: http://www.codeios.com/ 苹果开发中文站: http://www.

iOS开发者的资源库必不可少的资源有?

在这里向大家分享一下几个关于iOS资源的几个网站,也利于自己和他人以及团队的开发 iOS代码示例搜索, iOS特效示例, 大量的iOS开发Demo http://www.code4app.com/ 苹果开发中文网站CocoaChina, 最热的iPhone开发社区 http://www.cocoachina.com/ 新闻资讯类的:36氪, 关于互联网创业 http://www.36kr.com/ iOS开发国外的两个网站(纯英文): http://stackoverflow.com/ http

[email&#160;protected]第四章@编译Mac&amp;IOS版@V1.0.0

 驾驭开源库WebRTC 第四章-编译Mac&iOS版 作者:adam 鸣谢:老张 日期:2015-4-6 版本:1.0.0 欢迎转载,有问题反馈Q:2780113541,尽量完善系列教程. depot_tools代理设置参考老张<史上最牛逼的墙内下载webrtc代码说明_20150401> 0.官方源码svn自2015-3-24已迁至谷歌git 一些使用svn地址的教程已不适用或需改进 1.部署http(s)转sock5代理,具体参考第一章 Shadowsocks:代理地址 12

iOS sqlite3

简介 sqlite是短小精悍的关系型数据库,常运用于嵌入式设备,麻雀虽小五脏俱全,能满足大部分数据存储的需求,目前使用最多的是sqlite3. 其语句不区分大小写,每条语句必须以分号(;)结尾 ,不可使用关键字对表和字段命名. 常用关键字有SELECT.INSERT.UPDATE.DELETE.CREATE.DROP.ALTER.TABLE.FROM.WHERE.SET.ORDER.BY.GROUP.HAVING.DESC.ASC.VIEW.INDEX.IF NOT EXISTS.LIMIT.L

最简单的基于FFmpeg的移动端例子:Windows Phone HelloWorld

===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:Android HelloWorld 最简单的基于FFmpeg的移动端例子:Android 视频解码器 最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版 最简单的基于FFmpeg的移动端例子:Android 推流器 最简单的基于FFmpeg的移动端例子:Android 视频转

iPad和iPhone上的应用程序图标

问:如何在iPad和iPhone使用我的应用程序包中的图标文件? 答:下面是处理文件的图标为iPhone专用的应用程序,iPad的专用应用程序,以及通用的应用程序的指导方针. 如果你不为所列出的可选的图标之一提供的艺术品,系统将自动扩展现有的图标图像中的一个合适的尺寸.强烈建议您的应用程序包括列出的所有图标的艺术品,在所需的特定大小. 在此之前的iOS 3.2,要求图标图像遵循严格的命名约定.这些传统名称表中还列举如下一起为更近的例子图标名称.除了??iTunesArtwork,包括在您的应用程

ios-driver

从 Selenium 的官方文档来看,推荐用户使用 ios-driver 或 appium 而不是官方发布的 iPone Driver. 他们的地址分别是: http://ios-driver.github.io/ios-driver http://appium.io/ ios-driver 基于2种不同的框架构建起来,一种是针对原生 app 进行构建,还一种针对 Web 的 app 或者混合式 app 进行构建.鉴于2中不同 app 的设计原理,需要满足不同的开发环境需求. 1. 原生 app