IOS 學習筆記(9)tableView基礎

來源:互聯網
上載者:User

TableView是一個被分成不同部分的滾動視圖,每一部分又進一步被分成行,每行是一個UITableViewCell類的執行個體。可以把圖片,文本和其他任何東西嵌入tableView儲存格,可以自訂他們的形狀,高度,分組或更多。這些分別在UITableViewDataSource和UITableViewDelegate的協議來定義。

#import<UIKit/UIKit.h>

@interface TableViewController:UIViewController

@property(monatomic,strong)UITableView *myTableView;

@end

@implementation TableViewController

@synthesize myTableView;

-(void)viewDidLoad{

    [super viewDidLoad];

    self.myTableView = [ [UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];

    [self.view addSubview:self.myTableView];

}

這樣就建立了一個空白的TableView

UITableViewStylePlain
建立一個沒有背景圖片的空白 Table View
UITableViewStyleGrouped
建立一個有背景圖片和圓角組邊框的 Table View,類似於 Settings app。

怎麼添加資料呢?

遵循UITableViewDelegate協議:

//設定tableviewCell高度

-(void)viewDidLoad{

    [super viewDidLoad];

    CGRect tableViewFrame = self.view.bounds;

    self.myTableView = [[UITableView alloc]initWithFrame:tableViewFrame style:UITableViewStylePlain];

    self.myTableView.delegate = self;

    [self.view addSubview:self.myTableView];

}

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

    CGFloat result = 20.0f;

    if([tableView isEqual:self.myTableView]){

        result = 40.0f;

    }

    return result;

}

TableView中的儲存格的位置由其索引路徑展示出來,一個索引路徑是section和row索引的組合。section索引是從零開始的。

添加資料:

添加資料還需要遵循UITableViewDataSource協議

添加一下代碼

self.myTableView.dataSource = self;

self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

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

    NSInteger result = 0;

    if([tableView isEqual:self.myTableView]){

        result = 3;

    }

    return result;

}

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

    NSInteger result = 0;

    if([tableView isEqual:self.myTableView]){

        switch(section){

            case 0:{

                 result = 3;

                 break;

             }

             case 1:{

                 result = 5;

                 break;

             }

             case 2:{

                 result = 8;

                 break;

             }

        }

   }

   return result;

}

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

    UITableViewCell *result = nil;

    if([tableView isEqual:self.myTableView]){

        static NSString *TableViewCellIdentifier = @"MyCells";

        result = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier];

        if(result == nil){

            result = [ [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TableViewCellIdentifier];

        }

    result.textLabel.text = [NSString stringWithFormat:@"Section %ld,Cell %ld",(long)indexPath.section,(long)indexPath.row];

    }

    return result;

}

接收和處理Table view事件

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

    if([tableView isEqual:self.myTableView]){

        NSLog(@"%@",[NSString stringWithFormat:@"Cell %ld in Section %ld is Selected",(long)indexPath.row,(long)indexPath.section]);

    }

}

在TableView中使用不同種類的附件

result.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

建立自訂tableView儲存格附件

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

    UITableViewCell *result = nil;

    static NSString *myCellIdentifier = @"SimpleCell";

    result = [tableView dequeueReusableCellWithIdentifier:myCellIdentifier];

    if(result == nil){

        result = [ [UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:myCellIdentifier];

    }

    result.textLabel.text = [NSString stringWithFormat:@"Section %ld,Cell %ld",(long)indexPath.section,(long)indexPath.row];

    UIButton *button = [UIButton buttonWithType:UIButtonWithType:UIButtonTypeRoundedRect];

    button.frame = CGRectMake(0.0f,0.0f,150.0f,25.0f);

    [button setTitle:@"Expand" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(performExpand:) forControlEvents:UIControlEventTouchUpInside];

    result.accessoryView = button;

    return result;

}

-(void)performExpand:(id)paramSender{

    /*Take an at ion here*/

    UITableViewCell *ownerCell = (UITableViewCell *)paramSender:superview;

    if(ownerCell != nil){

        NSIndexPath *ownerCellIndexPath = [self.myTableView indexPathForCell:ownerCell];

        NSLog(@"Accessory in index path is tapped. indexPath = %@",ownerCellIndexPath);

        if(ownerCellIndexPath.section == 0 && ownerCellIndexPath.row == 1){

            /*This is the second row in the first section*/

        }

    }

}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.