tableView點(diǎn)擊下拉菜單

先給大家看看效果圖吧


直接給大家看代碼吧,注釋都很詳細(xì)

#import "ViewController.h"

@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property(nonatomic, strong)UITableView *tableView;
@property(nonatomic, strong)NSMutableArray *sectionArray;//section標(biāo)題
@property(nonatomic, strong)NSMutableArray *rowInSectionArray;//section中的cell個(gè)數(shù)
@property(nonatomic, strong)NSMutableArray *selectedArray;//是否被點(diǎn)擊
@end

@implementation ViewController

-(void)loadView
{
    [super loadView];
    _tableView = [[UITableView alloc]initWithFrame:CGRectMake(0 ,20 , self.view.frame.size.width, self.view.frame.size.height)style:UITableViewStylePlain];
     _tableView.tableFooterView = [[UIView alloc]init];
    _tableView.delegate = self;
    _tableView.dataSource = self;
    [self.view addSubview:_tableView];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    _sectionArray = [NSMutableArray arrayWithObjects:@"標(biāo)題1",@"標(biāo)題2",@"標(biāo)題3",@"標(biāo)題4", nil];//每個(gè)分區(qū)的標(biāo)題
    _rowInSectionArray = [NSMutableArray arrayWithObjects:@"4",@"2",@"5",@"6", nil];//每個(gè)分區(qū)中cell的個(gè)數(shù)
    _selectedArray = [NSMutableArray arrayWithObjects:@"0",@"0",@"0",@"0", nil];//這個(gè)用于判斷展開(kāi)還是縮回當(dāng)前section的cell
    
   
    }
#pragma mark cell的內(nèi)容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *identifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    cell.textLabel.text = _sectionArray[indexPath.section];
    return cell;
}

#pragma mark cell的行數(shù)
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    //判斷section的標(biāo)記是否為1,如果是說(shuō)明為展開(kāi),就返回真實(shí)個(gè)數(shù),如果不是就說(shuō)明是縮回,返回0.
    if ([_selectedArray[section] isEqualToString:@"1"]) {
        return [_rowInSectionArray[section]integerValue];
    }
    return 0;
}
#pragma mark section的個(gè)數(shù)
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return _sectionArray.count;
}

#pragma cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 40;
}

#pragma mark - section內(nèi)容
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
    //每個(gè)section上面有一個(gè)button,給button一個(gè)tag值,用于在點(diǎn)擊事件中改變_selectedArray[button.tag - 1000]的值
    UIView *sectionView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 375, 40)];
    sectionView.backgroundColor = [UIColor cyanColor];
    UIButton *sectionButton = [UIButton buttonWithType:UIButtonTypeCustom];
    sectionButton.frame = sectionView.frame;
    [sectionButton setTitle:[_sectionArray objectAtIndex:section] forState:UIControlStateNormal];
    [sectionButton addTarget:self action:@selector(buttonAction:) forControlEvents:UIControlEventTouchUpInside];
    sectionButton.tag = 1000 + section;
    [sectionView addSubview:sectionButton];
    return sectionView;
}
#pragma mark button點(diǎn)擊方法
-(void)buttonAction:(UIButton *)button
{
    if ([_selectedArray[button.tag - 1000] isEqualToString:@"0"]) {
        
//                for (NSInteger i = 0; i < _sectionArray.count; i++) {
//                    [_selectedArray replaceObjectAtIndex:i withObject:@"0"];
//                    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:i] withRowAnimation:UITableViewRowAnimationFade];
//                }

        
        //如果當(dāng)前點(diǎn)擊的section是縮回的,那么點(diǎn)擊后就需要把它展開(kāi),是_selectedArray對(duì)應(yīng)的值為1,這樣當(dāng)前section返回cell的個(gè)數(shù)就變?yōu)檎鎸?shí)個(gè)數(shù),然后刷新這個(gè)section就行了
        [_selectedArray replaceObjectAtIndex:button.tag - 1000 withObject:@"1"];
        [_tableView reloadSections:[NSIndexSet indexSetWithIndex:button.tag - 1000] withRowAnimation:UITableViewRowAnimationFade];
    }
    else
    {
        //如果當(dāng)前點(diǎn)擊的section是展開(kāi)的,那么點(diǎn)擊后就需要把它縮回,使_selectedArray對(duì)應(yīng)的值為0,這樣當(dāng)前section返回cell的個(gè)數(shù)變成0,然后刷新這個(gè)section就行了
        [_selectedArray replaceObjectAtIndex:button.tag - 1000 withObject:@"0"];
        [_tableView reloadSections:[NSIndexSet indexSetWithIndex:button.tag - 1000] withRowAnimation:UITableViewRowAnimationFade];
    }
}

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

@end

我在button的點(diǎn)擊方法里注釋了一段代碼,解除注釋后運(yùn)行的效果是這樣的

今天就到這里,祝大家開(kāi)心??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末供搀,一起剝皮案震驚了整個(gè)濱河市冻记,隨后出現(xiàn)的幾起案子扫夜,更是在濱河造成了極大的恐慌灰粮,老刑警劉巖碉钠,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異东抹,居然都是意外死亡介蛉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)燥透,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)代赁,“玉大人,你說(shuō)我怎么就攤上這事兽掰“虐” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵孽尽,是天一觀的道長(zhǎng)窖壕。 經(jīng)常有香客問(wèn)我,道長(zhǎng)杉女,這世上最難降的妖魔是什么瞻讽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮熏挎,結(jié)果婚禮上速勇,老公的妹妹穿的比我還像新娘。我一直安慰自己坎拐,他們只是感情好烦磁,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布养匈。 她就那樣靜靜地躺著,像睡著了一般都伪。 火紅的嫁衣襯著肌膚如雪呕乎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天陨晶,我揣著相機(jī)與錄音猬仁,去河邊找鬼。 笑死先誉,一個(gè)胖子當(dāng)著我的面吹牛湿刽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播褐耳,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叭爱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了漱病?” 一聲冷哼從身側(cè)響起买雾,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杨帽,沒(méi)想到半個(gè)月后漓穿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡注盈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年晃危,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片老客。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡僚饭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胧砰,到底是詐尸還是另有隱情鳍鸵,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布尉间,位于F島的核電站偿乖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏哲嘲。R本人自食惡果不足惜贪薪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眠副。 院中可真熱鬧画切,春花似錦、人聲如沸囱怕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至庞萍,卻和暖如春拧烦,著一層夾襖步出監(jiān)牢的瞬間忘闻,已是汗流浹背钝计。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齐佳,地道東北人私恬。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像炼吴,于是被迫代替她去往敵國(guó)和親本鸣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,737評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)硅蹦、插件荣德、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,059評(píng)論 4 62
  • 夕陽(yáng)西下 道途牽馬 我有一個(gè)美好的期望 它在那個(gè)遙遠(yuǎn)的地方 在那里鮮花盛開(kāi)滿(mǎn)懷 我卻聽(tīng)說(shuō)那里很遠(yuǎn)很遠(yuǎn) 要翻過(guò)高山和...
    徐十四閱讀 151評(píng)論 0 0