UIButton dibuat secara terprogram di bagian UITableView untuk menyembunyikan/menampilkan konten bagian tersebut

Saya membuat tombol UI secara terprogram dengan cara ini:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(hideOrShowWithButtonId:)forControlEvents:UIControlEventTouchDown];

Tujuan dari tombol ini adalah ketika ditekan, konten bagian dalam tampilan yang sesuai akan hilang, dan ketika diklik kembali, konten akan muncul kembali. Jadi ketika tombol ini diklik, ia memanggil fungsi di bawah ini: (CATATAN: self.cinemaButton, self.taxiButton dan self.foodButton adalah STRINGS dan BUKAN BUTTONS)

-(void)hideOrShowWithButtonId:(id)sender;
{
NSArray *dummy=[[[NSArray alloc] initWithObjects:nil] autorelease];
NSArray *dummy2=[[NSArray alloc] initWithObjects:self.cinemaButton,self.taxiButton,self.foodButton,nil];
NSLog(@"%@",self.taxiButton);
if([[dummy2 objectAtIndex:[sender tag]]isEqual:@"Hide"])
{
    NSLog(@"Want to hide");
    [self.sections removeAllObjects];
    switch ([sender tag]) {
        case 0: 
            [self.sections addObject:dummy];
            [self.sections addObject:self.taxiFavorite];
            [self.sections addObject:self.foodFavorite];
            [self.tableView reloadData];
            self.cinemaButton=[NSString stringWithString:@"Show"];
            break;            
        case 1: 
            [self.sections addObject:self.cinemaFavorite];
            [self.sections addObject:dummy];
            [self.sections addObject:self.foodFavorite];
            [self.tableView reloadData];
            self.taxiButton=[NSString stringWithString:@"Show"];
            break;
        case 2: 
            [self.sections addObject:self.cinemaFavorite];
            [self.sections addObject:self.taxiFavorite];
            [self.sections addObject:dummy];
            [self.tableView reloadData];
            self.foodButton=[NSString stringWithString:@"Show"];
            break;
    }
    NSLog(@"%@",self.taxiButton);
}
else
{
    NSLog(@"Want to show");
    switch ([sender tag]) {
        case 0: 
            [self.sections replaceObjectAtIndex:0 withObject:self.cinemaFavorite];
            [self.tableView reloadData];
            self.cinemaButton=[NSString stringWithString:@"Hide"];
            break;            
        case 1: 
            [self.sections replaceObjectAtIndex:1 withObject:self.taxiFavorite];
            [self.tableView reloadData];
            self.taxiButton=[NSString stringWithString:@"Hide"];
            break;
        case 2: 
            [self.sections replaceObjectAtIndex:2 withObject:self.cinemaFavorite];
            [self.tableView reloadData];
            self.foodButton=[NSString stringWithString:@"Hide"];
            break;
    }
}
[dummy2 release];
NSLog(@"%@",self.taxiButton);

}

Masalah dengan fungsi ini adalah string (misalnya dalam kasus saya: self.taxi) keluar dengan nilai @"Tampilkan", tetapi ketika menekan tombol lagi, ia memiliki nilai @"Sembunyikan" Nilai dari string self.taxibutton tidak berubah. Jadi fungsinya hanya mampu menyembunyikan isi bagian tersebut dan tidak menampilkannya lagi. Adakah alasan mengapa hal ini terjadi? Apakah ada cara yang lebih mudah untuk melakukan tugas menyembunyikan/menampilkan konten bagian tertentu di UItableView?


person Guy Daher    schedule 02.03.2012    source sumber


Jawaban (1)


Untuk menjawab pertanyaan Anda "Apakah ada cara yang lebih mudah", Anda mungkin ingin melihat beberapa kode demo yang berfungsi dari Apple di tautan ini. Kode ini menunjukkan cara membuat bagian yang dapat diciutkan. Saya mencoba mengembangkannya sendiri, dan mengalami beberapa kesulitan sebelum menyimpulkan bahwa masalah saya dapat diatasi dengan metode yang digunakan dalam kode ini. Kuncinya adalah memelihara tabel yang menyimpan informasi untuk setiap bagian, termasuk penunjuk ke tampilan header untuk setiap bagian. Saya mengadaptasi kode demo ini, dan langsung berfungsi dengan baik. Anda harus dapat mengkompilasi dan menjalankan kodenya sendiri.

Berikut ini sedikit saran yang tidak diminta: Anda harus memilih nama yang lebih deskriptif untuk variabel Anda jika Anda ingin orang lain meninjaunya dan memberikan saran. Tujuan dari dummy dan dummy2 tidak jelas, dan memberikan kesan langsung bahwa menawarkan bantuan akan membutuhkan lebih banyak usaha daripada yang seharusnya.

person Jim    schedule 02.03.2012