UIButton สร้างขึ้นโดยทางโปรแกรมในส่วนของ UITableView เพื่อซ่อน/แสดงเนื้อหาของส่วนนั้น

ฉันสร้าง UIbutton โดยทางโปรแกรมด้วยวิธีนี้:

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

วัตถุประสงค์ของปุ่มนี้คือ เมื่อกด เนื้อหาของส่วนในมุมมอง uitableview จะหายไป และเมื่อคลิกกลับ เนื้อหาจะกลับมา ดังนั้นเมื่อคลิกปุ่มนี้ มันจะเรียกใช้ฟังก์ชันด้านล่าง: (หมายเหตุ: self.cinemaButton, self.taxiButton และ self.foodButton คือ STRINGS และไม่ใช่ 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);

}

ปัญหาเกี่ยวกับฟังก์ชันนี้คือสตริง (เช่นในกรณีของฉัน: self.taxi) กำลังออกด้วยค่า @"Show" แต่เมื่อกดปุ่มอีกครั้งจะมีค่าเป็น @"Hide" ค่าของ string self.taxibutton ไม่เปลี่ยนแปลง ดังนั้นฟังก์ชันจึงสามารถซ่อนเนื้อหาของส่วนนั้นได้เท่านั้นและไม่แสดงอีก มีเหตุผลใดที่ทำให้สิ่งนี้เกิดขึ้น? มีวิธีที่ง่ายกว่าในการดำเนินการซ่อน / แสดงเนื้อหาของส่วนใดส่วนหนึ่งใน UItableView หรือไม่


person Guy Daher    schedule 02.03.2012    source แหล่งที่มา


คำตอบ (1)


เพื่อตอบคำถามของคุณ "มีวิธีที่ง่ายกว่านี้ไหม" คุณอาจต้องการดูโค้ดสาธิตการทำงานบางส่วนจาก Apple ที่ลิงก์นี้ รหัสนี้แสดงวิธีการมีส่วนที่ยุบได้ ฉันพยายามพัฒนาตนเองและประสบปัญหาบางอย่างก่อนที่จะสรุปว่าปัญหาของฉันถูกกำจัดโดยวิธีการที่ใช้ในโค้ดนี้ สิ่งสำคัญคือการรักษาตารางที่เก็บข้อมูลสำหรับทุกส่วน รวมถึงตัวชี้ไปยังมุมมองส่วนหัวของแต่ละส่วน ฉันดัดแปลงโค้ดสาธิตนี้ และมันทำงานได้ดีทันที คุณควรจะสามารถคอมไพล์และรันโค้ดได้ด้วยตัวเอง

ต่อไปนี้เป็นคำแนะนำเล็กๆ น้อยๆ ที่ไม่พึงประสงค์: คุณควรเลือกชื่อที่สื่อความหมายมากขึ้นสำหรับตัวแปรของคุณ หากคุณไม่ต้องการให้ผู้อื่นตรวจสอบและให้คำแนะนำ วัตถุประสงค์ของ dummy และ dummy2 ไม่ชัดเจน และให้ความรู้สึกทันทีว่าการให้ความช่วยเหลือจะต้องใช้ความพยายามมากกว่าที่ควรจะเป็น

person Jim    schedule 02.03.2012