PIXNET Logo登入

zer931的部落格

跳到主文

歡迎光臨zer931在痞客邦的小天地

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 6月 19 週三 201310:00
  • 實作 TableView Section 展開/收合

實作 TableView Section 展開/收合
 from http://blog.yslin.tw/2011/09/tableview-section.html
iPhone中的UITableViewController變化真的很多!
最近剛好需要實作展開/收合的功能,效果如圖所示:



我是參考Expanding/Collapsing TableView Sections的實作,然後在自己簡化。
一個展開/收合的單位為一個Section,Row0表示Parent,Row1~N表示Child,程式碼中都有註解。


  • testTableViewController.h












  • 1

    2

    3

    4

    5

    6

    7

    8



    #import <uikit uikit.h="">

     

    @interface MoodDiaryViewController : UITableViewController {

     /* Store the indexpath which already expanded */

     NSMutableIndexSet *expandedSections;

    }

    @end

    </uikit>







  • testTableViewController.h












  • 1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128



    #import "testTableViewController.h"

     

    @implementation MoodDiaryViewController

     

    #pragma mark -

    #pragma mark View lifecycle

     

    - (void)viewDidLoad {

        [super viewDidLoad];

     

     if (!expandedSections)

        {

            expandedSections = [[NSMutableIndexSet alloc] init];

        }

    }

     

     

    #pragma mark -

    #pragma mark Table view data source

     

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

        // Return the number of sections.

        return 3;

    }

     

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

        /* Return the number of rows in the section. */

     if ([expandedSections containsIndex:section]) {

      /* Return all rows when expanded */

      return 5;

     } else {

      /* Only top row showing */

      return 1;

     }

    }

     

     

    // Customize the appearance of table view cells.

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

        NSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d_%d", indexPath.section, indexPath.row];

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

      

     if (indexPath.row == 0) {

      /* Parent cell */

      if (cell == nil)

       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

       

      /* Change UI status */

      if ([expandedSections containsIndex:indexPath.section]) {

       cell.textLabel.text = [NSString stringWithFormat:@"- Section=%d Row=%d", indexPath.section, indexPath.row];

      } else {

       cell.textLabel.text = [NSString stringWithFormat:@"+ Section=%d Row=%d", indexPath.section, indexPath.row];

      }

       

     } else {

      /* Child cell */

      if (cell == nil)

       cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];

       

      cell.textLabel.text = [NSString stringWithFormat:@"Section=%d Row=%d", indexPath.section, indexPath.row];

     }

     

        return cell;

    }

     

     

    #pragma mark -

    #pragma mark Table view delegate

     

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

     /* If user choose the parent row */

     if (indexPath.row == 0) {

      NSInteger section = indexPath.section;

      BOOL currentlyExpanded = [expandedSections containsIndex:section];

      NSInteger rows;

      NSMutableArray *arrRows = [NSMutableArray array];

       

      if (currentlyExpanded) {

       /* Child cell for this parent */

       rows = [self tableView:tableView numberOfRowsInSection:section];

       [expandedSections removeIndex:section];

      } else {

       [expandedSections addIndex:section];

       rows = [self tableView:tableView numberOfRowsInSection:section];

      }

     

      /* Create child index path. Child path start frow index one */

      for (int i = 1; i < rows; i++) {

       NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i inSection:section];

       [arrRows addObject:tmpIndexPath];

      }

     

      UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

       

      /* Remove of insert above index path into tableview */

      if (currentlyExpanded) {

       [tableView deleteRowsAtIndexPaths:arrRows withRowAnimation:UITableViewRowAnimationTop];

       cell.textLabel.text = [NSString stringWithFormat:@"+ Section=%d Row=%d", indexPath.section, indexPath.row];

      } else {

       [tableView insertRowsAtIndexPaths:arrRows withRowAnimation:UITableViewRowAnimationTop];

       cell.textLabel.text = [NSString stringWithFormat:@"- Section=%d Row=%d", indexPath.section, indexPath.row];

      }

       

     } else { // For choosing child row

      ;

     }

    }

     

     

    #pragma mark -

    #pragma mark Memory management

     

    - (void)didReceiveMemoryWarning {

        // Releases the view if it doesn't have a superview.

        [super didReceiveMemoryWarning];

         

        // Relinquish ownership any cached data, images, etc. that aren't in use.

    }

     

    - (void)viewDidUnload {

        // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.

        // For example: self.myOutlet = nil;

    }

     

    - (void)dealloc {

        [super dealloc];

    }

    @end





     
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(202)

    • 個人分類:技巧篇
    ▲top
    • 1月 13 週日 201310:45
    • iOS 開發筆記 - 國曆轉農曆計算

    lunar-2013-06
    本文引用自changyy - iOS 開發筆記 - 國曆轉農曆計算 (Chinese Lunar Calendar)


    iOS 開發筆記 - 國曆轉農曆計算 (Chinese Lunar Calendar)



    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(316)

    • 個人分類:技巧篇
    ▲top
    • 11月 28 週三 201217:23
    • UIView 同時移動、旋轉、放大的作法


    UIView 同時移動、旋轉、放大的作法
    from http://servinggear.blogspot.tw/2012/02/uiview.html
     
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(59)

    • 個人分類:技巧篇
    ▲top
    • 11月 22 週四 201214:05
    • GCD介绍(一): 基本概念和Dispatch Queue


    GCD介绍(一): 基本概念和Dispatch Queue


    from http://www.dreamingwish.com/dream-2012/of-of-of-of-gcd-introduced-1-basic-concepts-in-and-the-dispatch-queue.html
    发布者: Seven's - 2012/02/28 - 分类:GCD教程
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(679)

    • 個人分類:技巧篇
    ▲top
    • 11月 18 週日 201216:49
    • iOS 基于键盘的编程所需技巧


    iOS 基于键盘的编程所需技巧
    from http://blog.csdn.net/zhangao0086/article/details/7063733
    IOS官方文件 可搜尋範例 KeyboardAccessory
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(66)

    • 個人分類:技巧篇
    ▲top
    • 11月 14 週三 201214:23
    • UIVIEW相關Method

    - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;
    根据指定view参照物,转换点的坐标
    比如在一个View上一个Button,在button上有个点,相对button的坐标知道了,想知道这个点在这个View上的坐标,就可以用这个API去转换
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(4)

    • 個人分類:技巧篇
    ▲top
    • 11月 09 週五 201219:19
    • 如果要在其他class存取 XXXAppDelegate內的變數有兩種做法

    如果要在其他class存取 XXXAppDelegate內的變數有兩種做法
     
    一.
    1在XXXAppDelegate的變數設定@property
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(16)

    • 個人分類:技巧篇
    ▲top
    • 11月 06 週二 201215:33
    • BNPieChart 圓餅圖繪製


    饼状图的绘制
    from http://www.winddisk.com/2012/06/17/piechart/
    Posted on June 17, 2012 by xuguoxing
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(86)

    • 個人分類:技巧篇
    ▲top
    • 11月 05 週一 201212:17
    • TableView Cell 使用方法dequeueReusableCellWithIdentifier

    螢幕快照 2012-11-05 下午12.16.37
    TableView Cell 使用方法dequeueReusableCellWithIdentifier
    從xib或storyboard 使用自定cell
     
    - (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(207)

    • 個人分類:技巧篇
    ▲top
    • 9月 29 週六 201209:30
    • UITableView cell自訂視圖中插入Table實現複雜介面

    image_thumb8.png
    UITableView cell自訂視圖中插入Table實現複雜介面
    from http://fecbob.pixnet.net/blog/post/35423964
    最近專案中需要實現如下圖所示的效果:
      
    (繼續閱讀...)
    文章標籤

    zer931 發表在 痞客邦 留言(0) 人氣(270)

    • 個人分類:技巧篇
    ▲top
    12»

    個人資訊

    zer931
    暱稱:
    zer931
    分類:
    不設分類
    好友:
    累積中
    地區:

    熱門文章

    • (7,044)C/C++ 箭頭(->) 、點(.)、雙冒號(::) 用法
    • (4,557)[Oracle] Cursor 與 Cursor Variable 的使用
    • (4,496) NO-IP 使用教學
    • (3,981)VMware 的 Bridged, Host-only 和 NAT 網路型態
    • (316)iOS 開發筆記 - 國曆轉農曆計算
    • (270)UITableView cell自訂視圖中插入Table實現複雜介面
    • (263)取得指南針 / 羅盤 / Magnetometer 數值的方法
    • (248)搭建 Windows 上 Apache + Git 服务器
    • (141)NSArray與NSMutableArray與NSMutableDictionary

    文章分類

    toggle GIT (3)
    • GIT MAC (1)
    • GIT Linux (2)
    • GIT Win (9)
    toggle PHP (3)
    • Server 設定 (4)
    • 程式技巧篇 (4)
    • PDO (1)
    toggle COCOS2D (2)
    • BOX2D (2)
    • 基本概念 (21)
    toggle IOS (4)
    • PUSH SERVER (2)
    • 基本概念 (21)
    • DataBase (3)
    • 技巧篇 (20)
    • VMWare (3)
    • Winodws (2)
    • C++ (2)
    • ORACLE (2)
    • 未分類文章 (1)

    最新文章

    • PHP.INI 打開DeBug模式
    • [JavaScript]null & undefined
    • 使用PDO時 產生 Zend Debugger Socket link error
    • phpMyAdmin sql query that uses parameters
    • PDO 介紹範例網址
    • genstrings across 多元路徑 Localizable
    • 實作 TableView Section 展開/收合
    • 分享一个搭建php版push服务器的流程
    • Push pem文件生成步骤
    • mac eclipse 設定php debugger

    最新留言

    • [21/05/06] 訪客 於文章「C/C++之指標 (pointer),參...」留言:
      圖不見了,可以煩請補上,讀起來會容易些,謝謝...
    • [15/08/17] snoopy 於文章「 NO-IP 使用教學...」留言:
      您好,想請教一下,我之前成功創設一個host,且不管使用無線...

    動態訂閱

    文章精選

    文章搜尋

    誰來我家

    參觀人氣

    • 本日人氣:
    • 累積人氣: