你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS UITableView Section下拉列表實現

IOS UITableView Section下拉列表實現

編輯:IOS開發綜合

轉載請注明我博客的地址:http://blog.liuxia520.com/

今天要使用UITableView做個列表分類的,如果列表很多,而且Section名稱還很長的話,使用Section就不是很直觀了。為了節省時間,就在網上搜了下,發現大部分的demo看起來麻煩,對我原有的代碼修改比較大,就想找個對我代碼修改較少的UITableView下拉列表擴展實現,不過沒找到,只好自己動手實現了。

第一步:

既然要使sectino能下拉,那麼必須要自己定制section了,所以我定制的sectinoView包含以下部分

#import 

@protocol HeaderDropSectionDelegate;

@interface HeaderDropSection : UIButton
{
    UIImageView *rightImageView;
    BOOL _isOpen;
}
@property(nonatomic,assign)id myDelegate;
@property(nonatomic,assign)int sectionIndex;//該SectionView屬於哪個section
@property(nonatomic,assign)BOOL isOpen;//默認關閉
@property(nonatomic,strong)UILabel *sectionTitleLable;//標題

@end

@protocol HeaderDropSectionDelegate 
//section點擊委托
-(void)HeaderDropSectionClick:(HeaderDropSection *)headerSectionView;

@end
 
 
第二步:
     設置UITableView Section 的代理
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    NSArray *array=[orderInfoDic allKeys];
    HeaderDropSection *headerDropView=[[HeaderDropSection alloc]initWithFrame:CGRectMake(0, 0, mTableView.frame.size.width, 60)];
    headerDropView.sectionTitleLable.text=[array objectAtIndex:section];
    headerDropView.myDelegate=self;
    headerDropView.sectionIndex=section;
    if(selectHeaderSectionIndex==section)
    {
        [headerDropView setIsOpen:YES];
        selectHeaderSectionIndex=section;
    }
    
    return headerDropView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 60;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    return 1;
}
//然後在返回section的代理中只需要增加一個判斷,原來的邏輯不需要該
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
       //增加判斷
      if(section!=selectHeaderSectionIndex)returnNewLostHt39

30NewLostHt;//不顯示沒有展開的


 //.................原有的代碼
}
 
 
第三步:
     實現自定義section的代理
-(void)HeaderDropSectionClick:(HeaderDropSection *)headerSectionView
{
    [headerSectionView setIsOpen:YES];
    
    //保存原來展開的section
    int oldIndex=selectHeaderSectionIndex;
    if(oldIndex!=-1)//閉合之前已經張開的section
    {
        selectHeaderSectionIndex=-1;
        [mTableView reloadSections:[NSIndexSet indexSetWithIndex:oldIndex] withRowAnimation:UITableViewRowAnimationFade];
    }
    
    //如果當前section不是展開的,則設置展開,否則閉合
    if(headerSectionView.sectionIndex!=oldIndex)
        selectHeaderSectionIndex=headerSectionView.sectionIndex;
    else
        selectHeaderSectionIndex=-1;
    
    //刷新需要展開的section
    if(selectHeaderSectionIndex!=-1)
    {
       [mTableView reloadSections:[NSIndexSet indexSetWithIndex:selectHeaderSectionIndex] withRowAnimation:UITableViewRowAnimationFade];
    }
}
 
對原來的代碼增加以上部分就可以實現UITableView Section下拉功能了。
注:變量selectHeaderSectionIndex   用來保存當前正在展開的section,沒有展開為-1,而且我這個目前設計為同時只能有一個section展開,如果需要多個seciton都能展開,可以使用數組保存需要展開的selectHeaderSectionIndex    。
由於是項目中得一個功能,所以源碼就不上傳了。有時間的補一個demo
 
 
 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved