方法:
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);
}
}
效果:
沒有留言:
張貼留言