У меня есть UITableViewController, который я использую для создания настроек моего приложения.
В секции, содержащей только одну строку, я помещаю переключатель UIS.
Как вставить новую строку в ту же секцию строки с помощью переключателя, только если переключатель установлен в положение YES?И как я могу удалить эту строку, если переключатель установлен в положение NO?
Кто-нибудь может мне помочь?Спасибо!
Я пытался использовать insertRowsAtIndexPaths: withRowAnimation: метод, но не работает ...
Это мой код таблицы настроек:
- (void)viewDidLoad {
[super viewDidLoad];
self.title = NSLocalizedString(@"Impostazioni", @"");
}
- (void)viewWillAppear:(BOOL)animated {
[self.tableView reloadData];
}
-(void)addCellToSetCode:(id)sender {
if ([codeSwitch isOn]) {
NSIndexPath *updatedIndexPath = [NSIndexPath indexPathForRow:1 inSection:2];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:updatedIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
[[NSUserDefaults standardUserDefaults] setBool:codeSwitch.on forKey:@"stateOfSwitch"];
}
else {
NSIndexPath *updatedIndexPath = [NSIndexPath indexPathForRow:1 inSection:2];
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:updatedIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
[[NSUserDefaults standardUserDefaults] setBool:codeSwitch.on forKey:@"stateOfSwitch"];
}
}
#pragma mark -
#pragma mark Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 4;
}
-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if (section == 0) {
return NSLocalizedString(@"ListaDesideri", @"");
}
if (section == 1) {
return NSLocalizedString(@"CondivisioneMail", @"");
}
if (section == 2) {
return @"Sicurezza";
}
else {
return nil;
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (section == 0) || (section == 2) || (section == 3) {
return 2;
}
else if (section == 1) {
return 1;
}
else {
return 1;
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}
if (indexPath.section == 0 && indexPath.row == 0) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
cell.textLabel.text = NSLocalizedString(@"Ordine", @"");
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Nome"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Nome", @"");
}
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Costo"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Costo", @"");
}
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Categoria"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Categoria", @"");
}
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Nome Discendente"]) {
cell.detailTextLabel.text = NSLocalizedString(@"NomeDiscendente", @"");
}
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Costo Discendente"]) {
cell.detailTextLabel.text = NSLocalizedString(@"CostoDiscendente", @"");
}
if ([[defaults objectForKey:@"ordinaPer"] isEqualToString:@"Categoria Discndente"]) {
cell.detailTextLabel.text = NSLocalizedString(@"CategoriaDiscendente", @"");
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (indexPath.section == 0 && indexPath.row == 1) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
cell.textLabel.text = NSLocalizedString(@"DettagliDesiderio", @"");
if ([[defaults objectForKey:@"dettagliView"] isEqualToString:@"costoView"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Costo", @"");
}
if ([[defaults objectForKey:@"dettagliView"] isEqualToString:@"descrizioneView"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Descrizione", @"");
}
if ([[defaults objectForKey:@"dettagliView"] isEqualToString:@"urlView"]) {
cell.detailTextLabel.text = NSLocalizedString(@"URL", @"");
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (indexPath.section == 1 && indexPath.row == 0) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
cell.textLabel.text = NSLocalizedString(@"Shortener", @"");
if ([[defaults objectForKey:@"linkShortener"] isEqualToString:@"Nessuno"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Nessuno", @"");
}
if ([[defaults objectForKey:@"linkShortener"] isEqualToString:@"is.gd"]) {
cell.detailTextLabel.text = NSLocalizedString(@"is.gd", @"");
}
if ([[defaults objectForKey:@"linkShortener"] isEqualToString:@"bit.ly"]) {
cell.detailTextLabel.text = NSLocalizedString(@"bit.ly", @"");
}
if ([[defaults objectForKey:@"linkShortener"] isEqualToString:@"TinyURL"]) {
cell.detailTextLabel.text = NSLocalizedString(@"TinyURL", @"");
}
if ([[defaults objectForKey:@"linkShortener"] isEqualToString:@"Linkyy"]) {
cell.detailTextLabel.text = NSLocalizedString(@"Linkyy", @"");
}
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (indexPath.section == 2 && indexPath.row == 0) {
cell.textLabel.text = @"Access Code";
codeSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0, 0, 84, 27)];
cell.accessoryView = codeSwitch;
[codeSwitch addTarget:self action:@selector(addCellToSetCode:) forControlEvents:UIControlEventValueChanged];
codeSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"codeSwitchState"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
if (indexPath.section == 3 && indexPath.row == 0) {
cell.textLabel.text = NSLocalizedString(@"Supporto", @"");
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (indexPath.section == 3 && indexPath.row == 1) {
cell.textLabel.text = NSLocalizedString(@"Informazioni", @"");
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
return cell;
}
РЕДАКТИРОВАТЬ: Обновления ниже ...
Я решил часть этой проблемы!
Я пытался использовать [self.tableView reloadData], но не работает, и случайно решил, используя [self.tableView setNeedsDisplay] ...
Теперь коммутатор работает, но если я установил на него, а затем выхожу из приложения, полностью закрывая его, коммутатор не работает ... Как я могу решить эту проблему?
Если это может помочь другим, это обновленные части кода:
-(void)addCellToSetCode:(id)sender {
if ([codeSwitch isOn]) {
NSIndexPath *updatedIndexPath = [NSIndexPath indexPathForRow:1 inSection:2];
[self.tableView beginUpdates];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:updatedIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
[self.tableView setNeedsDisplay];
[[NSUserDefaults standardUserDefaults] setBool:codeSwitch.on forKey:@"codeSwitchState"];
}
else {
NSIndexPath *updatedIndexPath = [NSIndexPath indexPathForRow:1 inSection:2];
[self.tableView beginUpdates];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:updatedIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];
[self.tableView setNeedsDisplay];
[[NSUserDefaults standardUserDefaults] setBool:codeSwitch.on forKey:@"codeSwitchState"];
}
}
// tableView:numberOfRowsInSection:
else if (section == 2) {
return codeSwitch.on ? 2 : 1;
}
// tableView:cellForRowAtIndexPath:
if (indexPath.section == 2 && indexPath.row == 0) {
cell.textLabel.text = @"Access Code";
codeSwitch = [[UISwitch alloc] initWithFrame:CGRectMake(0, 0, 84, 27)];
cell.accessoryView = codeSwitch;
[codeSwitch addTarget:self action:@selector(addCellToSetCode:) forControlEvents:UIControlEventValueChanged];
codeSwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"codeSwitchState"];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
if (indexPath.section == 2 && indexPath.row == 1) {
if ([codeSwitch isOn]) {
cell.textLabel.text = @"Set Access Code";
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
}