Skip to main content

How to tell which rows toggle switch was changed



I have a tableview with the accessoryview of a toggle switch. I specify the section and the row and am having a difficult time determining which row was toggled. I used the toggleSwitch.tag to grab the indexRow but as my indexRow is part of an indexPath.section I am not sure how to tell which row I toggled.





Here is the code:







- (UITableViewCell *)tableAlert:(SBTableAlert *)tableAlert cellForRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell;



Category *cat = [allCategories objectAtIndex:indexPath.section];

Subject *sub = [cat.subjects objectAtIndex:indexPath.row];



cell = [[[SBTableAlertCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

UISwitch *toggleSwitch = [[UISwitch alloc] init];

cell.accessoryView = [[UIView alloc] initWithFrame:toggleSwitch.frame];

[cell.accessoryView addSubview:toggleSwitch];



cell.textLabel.text =sub.title;

cell.detailTextLabel.text = sub.category_title;



if (sub.active==1){

[toggleSwitch setOn:YES];

} else {

[toggleSwitch setOn:NO];

}



toggleSwitch.tag = indexPath.row;



[toggleSwitch addTarget:self action:@selector(viewButtonPushed:) forControlEvents:UIControlEventValueChanged];

[toggleSwitch release];



return cell;



}





- (void)viewButtonPushed:(id)sender {

UIButton *button = (UIButton *)sender;

UITableViewCell *cell = button.superview; // adjust according to your UITableViewCell-subclass' view hierarchy

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];



Category *cat = [allCategories objectAtIndex:indexPath.section];

Subject *sub = [cat.subjects objectAtIndex:indexPath.row];



selectedSubject = sub;



UISwitch* switchControl = sender;

NSLog( @"The switch is %@", switchControl.on ? @"ON" : @"OFF" );



if(switchControl.on){

[sub setActive:1];

NSLog(@"%@ is being set to ACTIVE", selectedSubject.title);

}else{

[sub setActive:0];

NSLog(@"%@ is being set to INACTIVE", selectedSubject.title);

}



[sub setIsDirty:YES];



[cat.subjects replaceObjectAtIndex:indexPath.row withObject:sub];



[sub autorelease];

[cat autorelease];



}







Here is my didSelectRowAtIndexPath. Do I need to have any reference to the toggleSwitch here?







- (void)tableAlert:(SBTableAlert *)tableAlert didSelectRowAtIndexPath:(NSIndexPath *)indexPath {



Category *cat = [allCategories objectAtIndex:indexPath.section];

Subject *sub = [cat.subjects objectAtIndex:indexPath.row];



selectedSubject = sub;

NSLog(@"selectedSubject = %@", selectedSubject.title);





if (tableAlert.type == SBTableAlertTypeMultipleSelct) {

UITableViewCell *cell = [tableAlert.tableView cellForRowAtIndexPath:indexPath];

if (cell.accessoryType == UITableViewCellAccessoryNone)

[cell setAccessoryType:UITableViewCellAccessoryCheckmark];

else

[cell setAccessoryType:UITableViewCellAccessoryNone];



[tableAlert.tableView deselectRowAtIndexPath:indexPath animated:YES];

}



}




Comments

  1. I have found that you need to go to the superview of the superview of the item in the cell (assuming that the button or control is right off the root of the cell) in order to get the pointer to the cell.

    Try this instead:

    UITableViewCell *cell = button.superview.superview;


    and see if the results are any better. Check out my blog post on this for more information:

    Two superviews are better than one

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?

CCNA 1 Final Exam 2011 latest (hot hot hot)

  Hi! I have been posted content of ccna1 final exam (latest and only question.) I will post the answer and insert image on sunday. If you care, please subscribe your email an become a first person have full test content. Subcribe now  Some question  have not content because this question have images content. So that can you wait for me? SUNDAY 1. A user sees the command prompt: Router(config-if)# . What task can be performed at this mode? Reload the device. Perform basic tests. Configure individual interfaces. Configure individual terminal lines. 2. Refer to the exhibit. Host A attempts to establish a TCP/IP session with host C. During this attempt, a frame was captured with the source MAC address 0050.7320.D632 and the destination MAC address 0030.8517.44C4. The packet inside the captured frame has an IP source address 192.168.7.5, and the destination IP address is 192.168.219.24. At which point in the network was this packet captured? leaving host A leaving ATL leaving...