精通IOS开发-表视图的使用

//
//  ViewController.m
//  Simple Table
//
//  Created by  Jierism on 16/7/20.
//  Copyright © 2016年  Jierism. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
// 声明一个数组,用来储存表单元的内容
@property(copy,nonatomic) NSArray *dwarves;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    // 初始化表单元的内容
    self.dwarves = @[@"SLEEPY",@"SNEEZY",@"BASHFUL",@"HAPPY",@"DOC",@"GRUMPY",@"DOPEY",@"THORIN",@"DORIN",
                     @"NORI",@"ORI",@"BALIN",@"DWALIN",@"FILI",@"KILI",@"OIN",@"GLOIN",@"BIFUR",@"BOFUR"];
}

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

// 返回数组的元素个数,即cell的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [self.dwarves count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    // 声明一个静态字符串实例,作为键使用,用来表示某种表单元
    // 比较复杂的表需要根据它们的内容和位置使用不同的类型的表单元,这样就需要不同的表单元标识符来区分每一种表单元类型
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";

    // 生成表单元
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    // 当视图中没有表单元时,生成表单元,数目为数组的元素个数
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault // 设置cell的样式,这里为默认
                                      reuseIdentifier:SimpleTableIdentifier];
    }

    // 在每个表单元前面插入一个图像
    UIImage *image = [UIImage imageNamed:@"star"];  // 普通状态时显示这个
    cell.imageView.image = image;
    UIImage *highlightedImage = [UIImage imageNamed:@"star2"]; // 被点击时显示这个
    cell.imageView.highlightedImage = highlightedImage;

    cell.textLabel.text = self.dwarves[indexPath.row];
    cell.textLabel.font = [UIFont boldSystemFontOfSize:50]; // 改变字体大小

    // 设置每行的细节文本,当cell的样式设置为非默认才会显示
    if (indexPath.row < 7) {
        cell.detailTextLabel.text = @"Mr.Disney";  // 前面7行的内容是Mr.Disney
    }else{
        cell.detailTextLabel.text = @"Mr.Tolkien"; // 后面的内容是 Mr.Tolkien
    }
    return cell;
}

// 设置行单元级缩进
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return indexPath.row % 4;
}

// 设置行不能被选中,这里指定第一行
- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == 0) {
        return nil;
    }else{
        return indexPath;
    }
}

// 警告显示
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *rowValue = self.dwarves[indexPath.row];
    NSString *message = [[NSString alloc] initWithFormat:@"You selected %@",rowValue];

    UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"Row Selected!" message:message preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Yes I did" style:UIAlertActionStyleDefault handler:nil];

    [controller addAction:cancelAction];
    [self presentViewController:controller animated:YES completion:nil];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

// 修改行的高度,这里指定除了第一行是120以外,其他行均为70r
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return indexPath.row == 0 ? 120:70;
}

@end

以上代码实现了一个简单的表视图,运行效果如下图

选中一个cell,图标发生变化,并显示警告弹窗,如图

其中这段代码,只有当cell设置为Default以外的任意一种style才会显示

 // 设置每行的细节文本,当cell的样式设置为非默认才会显示
    if (indexPath.row < 7) {
        cell.detailTextLabel.text = @"Mr.Disney";  // 前面7行的内容是Mr.Disney
    }else{
        cell.detailTextLabel.text = @"Mr.Tolkien"; // 后面的内容是 Mr.Tolkien
    }
    return cell;

UITableViewCellStyleValueSubtitle运行效果:

(ps:为了能看清楚效果,我把字体改小了)

UITableViewCellStyleValue1运行效果:

UITableViewCellStyleValue2运行效果:

时间: 2025-01-06 14:31:50

精通IOS开发-表视图的使用的相关文章

盘点国内程序员不常用的热门iOS第三方库:看完,还敢自称”精通iOS开发”吗?【转载】

综合github上各个项目的关注度与具体使用情况,涵盖功能,UI,数据库,自动化测试,编程工具等类型,看完,还敢自称”精通iOS开发”吗? https://github.com/syedhali/EZAudio 基于核心音频,有助于进行实时,低延迟音频处理和可视化的iOS和OSX音频可视化框架. https://github.com/bang590/JSPatch JSPatch使用Objective-C运行时桥接Objective-C和Javascript.你可以只包括一个此库,就可以通过Ja

[转]iOS开发之视图控制器(UIViewController)

视图控制器应该在MVC设计模式中扮演控制层(C)的角色,UIViewController的职责对内管理与之关联的View,对外跟其他UIViewController通信和协调.一个视图控制器管理一个视图(它可以有子视图),其view属性指向它所管理的视图.UIViewController类可以有子类,可以使用一个系统的UIViewController子类或者直接自己创建一个UIViewController的子类. 使用代码创建控制器和视图. 开始创建一个基于窗口的Empty Applicatio

iOS开发系列--视图切换

概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController UINavigationController 模态窗口 UITabBarController iOS三种视图切换的原理各不相同: UITabBarController:以平行的方式管理视图,各个视图之间往往关系并不大,每个加入到UITabBarController的视图都会进行初始化即使当前不显示在

iOS开发中视图控制器ViewControllers之间的数据传递

iOS开发中视图控制器ViewControllers之间的数据传递 这里我们用一个demo来说明ios是如何在视图控制器之间传递重要的参数的.本文先从手写UI来讨论,在下一篇文章中讨论在storyboard中传递数据. 首先新建一个空工程,并添加一个根视图控制器类,如下图所示: # 在函数didFinishLunchingWithOption中添加几行代码,完成后如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 - (BOOL)application:(UIApplication

学习ios(必看经典)牛人40天精通iOS开发的学习方法

学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲解.也适合想提升技能的已从事iOS开发的工作人员以最短时间内提升技能的从业者. 目标 通过本系列课程的学习,希望使一个对iOS开发感兴趣,想从事iOS开发的学员,成为一名真正iOS开发人员,iOS从业者,iOS技术大牛,最重要的是学会解决开发中遇到困难的方法. 建议 建议学员,尤其是初学者,一定要打

IOS之表视图单元格删除、移动及插入

1.实现单元格的删除,实现效果如下 Cpp代码   - (void)viewDidLoad { [super viewDidLoad]; //设置导航栏 self.editButtonItem.title = @"编辑"; self.navigation.rightBarButtonItem = self.editButtonItem; [self initTableViewData]; // Do any additional setup after loading the view

IOS开发之视图和视图控制器

视图(View), 视图控制器(ViewController)是IOS开发UI部分比较重要的东西.在学习视图这一块的东西的时候,感觉和Java Swing中的Panel差不多.在UIKit框架中都有一个UIWindow来容纳我们的View.应用程序中几乎全部的可视控件都是UIView以及UIView的子类的实例,并且UIWindow也是UIView的子类.UIWindow可以不借助于父类视图显示在屏幕上,其余的视图都需要添加到父视图中才能显示.窗口是用来显示视图的,下面我们将会结合着实例来具体的

第三章:IOS Table表视图委托协议和数据协议

表视图有两个重要的协议 UITableViewDataSource :数据源协议   方法 返回类型 说明 必须实现 tableView:cellForRowAtIndexPath: UITableViewCell* 为表视图单元格提供数据,该方法是必 须实现的方法 是 tableView:numberOfRowsInSection: NSInteger 返回某个节中的行数 是 tableView:titleForHeaderInSection: NSString 返回节头的标题 否 table

第二章:IOS Table表视图单元格简单介绍

单元格在Table里面也是很总要的一个部分,我们现在就来看看 1. 视图组成结构 图标.标题和副标题可以有选择地设置,扩展 视图可以内置或者自定义,其中内置的扩展视图是在枚举类型UITableViewCellAccessoryType中定义的 UITableViewCellAccessoryType 的常量枚举类型有以下几种: UITableViewCellAccessoryNone.没有扩展图标 UITableViewCellAccessoryDisclosureIndicator.扩展指示器