iOS中 UITableViewRowAction tableViewcell編輯狀態下的功能 UI技術分享

來源:互聯網
上載者:User

iOS中 UITableViewRowAction tableViewcell編輯狀態下的功能 UI技術分享

 

* tableView:editActionsForRowAtIndexPath: // 設定滑動刪除時顯示多個按鈕

* UITableViewRowAction // 通過此類建立按鈕

* 1. 我們在使用一些應用的時候,在滑動一些連絡人的某一行的時候,會出現刪除、置頂、更多等等的按鈕,在iOS8之前,我們都需要自己去實現。But,到了iOS8,系統已經寫好了,只需要一個代理方法和一個類就搞定了

* 2. iOS8的協議多了一個方法,傳回值是數組的tableView:editActionsForRowAtIndexPath:方法,我們可以在方法內部寫好幾個按鈕,然後放到數組中返回,那些按鈕的類就是UITableViewRowAction

* 3. 在UITableViewRowAction類,我們可以設定按鈕的樣式、顯示的文字、背景色、和按鈕的事件(事件在Block中實現)

* 4. 在代理方法中,我們可以建立多個按鈕放到數組中返回,最先放入數組的按鈕顯示在最右側,最後放入的顯示在最左側

* 5. 注意:如果我們自己設定了一個或多個按鈕,系統內建的刪除按鈕就消失了...

布局:

SDViewController.m

 

#import DetailViewController.h#define kCell @cell@interface SDViewController ()@property (nonatomic, retain) NSMutableArray *dataArray;@end@implementation SDViewController- (void)dealloc{    self.dataArray = nil;    [super dealloc];}


 

 

  //配置右側按鈕      self.navigationItem.rightBarButtonItem =self.editButtonItem;
    self.dataArray = [[NSMutableArray alloc]initWithObjects:@1,@2,@3,@4,@5, nil];    //註冊    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:kCell];

配置分區和行數:
//分區個數- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return 1;}//行數- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    return [self.dataArray count];}

設定cell的樣式:

 

 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCell forIndexPath:indexPath];    if (cell == nil) {        cell = [[UITableViewCell alloc]initWithStyle:(UITableViewCellStyleValue1) reuseIdentifier:kCell];    }  //cell上顯示的內容    cell.textLabel.text = [self.dataArray objectAtIndex:indexPath.row];    return cell;}
設定是否可編輯:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {    // Return NO if you do not want the specified item to be editable.    return YES;}

 

設定處理編輯情況

 

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {    if (editingStyle == UITableViewCellEditingStyleDelete) {        // Delete the row from the data source        //更新資料        [self.dataArray removeObjectAtIndex:indexPath.row];        //更新UI        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];    }else if (editingStyle == UITableViewCellEditingStyleInsert) {     } }
重點:

 

 

//設定滑動時顯示多個按鈕- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{//添加一個刪除按鈕UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@刪除 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {    NSLog(@點擊了刪除);        //1.更新資料    [self.dataArray removeObjectAtIndex:indexPath.row];    //2.更新UI    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationAutomatic)];    }];    //刪除按鈕顏色    deleteAction.backgroundColor = [UIColor cyanColor];    //添加一個置頂按鈕    UITableViewRowAction *topRowAction =[UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleDestructive) title:@置頂 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {        NSLog(@點擊了置頂);        //1.更新資料        [self.dataArray exchangeObjectAtIndex:indexPath.row withObjectAtIndex:0];        //2.更新UI        NSIndexPath *firstIndexPath =[NSIndexPath indexPathForRow:0 inSection:indexPath.section];        [tableView moveRowAtIndexPath:indexPath toIndexPath:firstIndexPath];            }];       //置頂按鈕顏色    topRowAction.backgroundColor = [UIColor magentaColor];           //--------更多    UITableViewRowAction *moreRowAction = [UITableViewRowAction rowActionWithStyle:(UITableViewRowActionStyleNormal) title:@更多 handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) {        DetailViewController *detailVC = [[DetailViewController alloc]init];        [self.navigationController pushViewController:detailVC animated:YES];           }];    //背景特效    //moreRowAction.backgroundEffect = [UIBlurEffect effectWithStyle:(UIBlurEffectStyleDark)];    //----------收藏    UITableViewRowAction *collectRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@收藏handler:^(UITableViewRowAction *action,NSIndexPath *indexPath) {                               UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@收藏 message:@收藏成功 delegate:self cancelButtonTitle:@確定 otherButtonTitles:nil, nil];                [alertView show];        [alertView release];    }];    //收藏按鈕顏色     collectRowAction.backgroundColor = [UIColor greenColor];        //將設定好的按鈕方到數組中返回    return @[deleteAction,topRowAction,moreRowAction,collectRowAction];   // return @[deleteAction,topRowAction,collectRowAction];}
效果:


 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.