這對於專家來說可能是一個簡單的問題,但我無法弄清楚正確的解決方案。在iPhone中使用開關ON/OFF隱藏表格視圖單元格
在我的應用程序中,我創建了一個表視圖來列出一個no項。
在單元的第一行有一個開關(ON/OFF
)。
所以我的客戶端需要在開關爲OFF
時隱藏底部單元(除第零個單元外),並在開關爲ON
時顯示所有單元。
我通過代碼創建了開關。
任何人都可以請幫助我如何做到這一點?
在此先感謝。
這對於專家來說可能是一個簡單的問題,但我無法弄清楚正確的解決方案。在iPhone中使用開關ON/OFF隱藏表格視圖單元格
在我的應用程序中,我創建了一個表視圖來列出一個no項。
在單元的第一行有一個開關(ON/OFF
)。
所以我的客戶端需要在開關爲OFF
時隱藏底部單元(除第零個單元外),並在開關爲ON
時顯示所有單元。
我通過代碼創建了開關。
任何人都可以請幫助我如何做到這一點?
在此先感謝。
numberOfRows數據源的方法 - 使它返回1和reloadTableView
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
/// ....
self.switchView = [[[UISwitch alloc] initWithFrame:CGRectZero]autorelease];
cell.accessoryView = self.switchView;
[self.switchView setOn:NO animated:NO];
[self.switchView addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
//....
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if [self.switchView.on]
return 1;
else
{
// normal code return
}
}
- (void) switchChanged:(id)sender {
[self.tableView reloadData];
}
有所謂的tableView一個UITableViewDataSource方法:numberOfRows:inSections method.Just檢查開關的狀態,並返回1,如果它是OFF或全部行,如果它是ON。每次打開和關閉時調用[tableView reloadData]方法。就如此容易。
當調用reloadData方法時,會按順序調用以下方法:1. tableView:numberOfSections:2 tableView:numberOfRows:inSection:3. tableView:cellForRowAtIndexPath:methodfs。所以當你打開和關閉時你必須調用它。 – 2012-02-18 06:50:34
你可以使用insertRowsAtIndexPaths
,這不僅會增加,而且還做的加入新行
第一添加目標UIControlEventTouchUpInside
到UISwitch
的動畫。
[switch addTarget:self action:@selector(switchChange:) forControlEvents:UIControlEventValueChanged];
- (空)switchChange:(UISwitch *)發件人{
isSwitchOn = sender.on; //edited [myTable beginUpdates]; NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; //you may add as many row as you want here. [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationMiddle]; [myTable endUpdates];
}
,並確保你將增加你多少行插入numberOfRowsInSection:
(NSInteger的)的tableView:(UITableView的*)的tableView numberOfRowsInSection:(NSInteger的)部分 {
如果(isSwitchOn)返回1;
else return 3; //多少行會對
切換後}
你可能要檢查[myTable insertSections:withRowAnimation:
插入另一部分,做上述相同。但記得要說明你有多少部分添加,在numberOfSectionsInTableView:
UPDATE:
實施deleteRowsAtIndexPaths:
如果關掉。
- (無效)switchChange:(UISwitch *)發件人{
isSwitchOn = sender.on; if(isSwitchOn){ [myTable beginUpdates]; NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; //you may add as many row as you want here. [myTable insertRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationMiddle]; [myTable endUpdates]; } else{ [myTable beginUpdates]; NSIndexPath *row1 = [NSIndexPath indexPathForRow:1 inSection:0]; NSIndexPath *row2 = [NSIndexPath indexPathForRow:2 inSection:0]; //you may add as many row as you want here. [myTable deleteRowsAtIndexPaths:[NSArray arrayWithObjects:row1,row2,nil] withRowAnimation:UITableViewRowAnimationFade]; [myTable endUpdates]; }
}
@mbh,這是一個UITableVIewDataSource方法,不是委託方法。 – 2012-02-18 06:46:53
感謝您的更正。還添加了解釋代碼。 – mbh 2012-02-18 06:54:22
我們能不能隱藏和顯示下面的單元格與小動畫,就像iOS本機設置的應用程序? – 2015-03-27 10:10:00