2012年2月3日 星期五

iOS學習_於UITableView加上UISwitch(判斷點到哪一個)

某些情況下,我們會製作許多Check box的介面,來提供使用者做多項目的勾選(例如圖層是否顯示的勾選),因為屬於項目不定的類型,所以通常會想用列表的方式展現,而在iOS當中Check Box就是UISwitch,而可參展的列表就是UITableView。

方法:
1. 於tableView Delegate需實作的方法cellForRowAtIndexPath中,指定cell.accessoryView的屬性

UISwitch *switchview = [[UISwitch alloc] initWithFrame:CGRectZero];
switchview.on = YES;
[switchview addTarget:self action:@selector(chick_Switch:) forControlEvents:UIControlEventValueChanged];
cell.textLabel.text = layername;
cell.accessoryView = switchview;
[switchview release];

說明:accessoryView屬性將會把指定的View加到TableView Cell的右側。

2. 撰寫上述的chick_Switch方法,該方法將會在改變UISwitch值時觸發(也就是開變關、關變開)
h檔

-(IBAction) chick_Switch:(id) sender;

m檔

-(void)chick_Switch:(id)sender
{
UISwitch *switchView = (UISwitch *)sender;
if ([switchView isOn]) {
NSLog(@"open");
} else {
NSLog(@"close");
}
}


如此,就可以將UISwitch加到TableView的每一個Cell當中,並且在開關的時候觸發chick_Switch事件,來作相關的處理。

雖然可以判斷點到的是開還是關,但卻沒辦法判斷點到哪一個?我們可以利用superview的方法,來往上層尋找可以判斷的內容,比如Cell的文字,或是indexPath。

方法:

-(void)chick_Switch:(id)sender
{
UISwitch *switchView = (UISwitch *)sender;
UITableViewCell *cell = (UITableViewCell *)switchView.superview;
NSString *layerName = cell.textLabel.text;

UITableView *tableView = (UITableView *)cell.superview;
NSIndexPath *indexPath = [tableView indexPathForCell:cell];

if ([switchView isOn]) {
NSLog(@"%@ open",layerName);
NSLog(@"%@ open",indexPath);
} else {
NSLog(@"%@ open",layerName);
NSLog(@"%@ open",indexPath);
}
}


效果:

沒有留言:

張貼留言