UITableView с UIS-сегментированным элементом управления и галочкой

Я новичок в мире программирования на Objective-C и iOS, поэтому буду признателен за небольшую помощь.

Вот моя проблема. У меня есть UITableView с UISegmentedControl. У этого есть 6 различных сегментов, которые изменяют содержание таблицы, изменяя NSMutableArray. Мне удалось это сделать, поэтому я уже очень горжусь собой, но проклятие новичка возвращается сегодня. Я хочу реализовать галочки для выбора ячеек и передачи данных ячеек в другой UITableView. Первая проблема заключается в том, что у меня есть свои галочки, но я нажимаю на другой сегмент, данные обновляются, но остаются галочки из предыдущего сегмента. Как решить эту проблему.

Во-вторых, как лучше всего передать данные из всех сегментов этого UITableView в другое табличное представление, выбрав ячейки?

Вот мой UITableViewController.h

@class MesExercicesViewController;

@protocol MesExercicesViewControllerDelegate <NSObject>

- (void) mesExercicesViewControllerDidCancel:
(MesExercicesViewController *) controller;

- (void) mesExercicesViewControllerDidSave:
(MesExercicesViewController *)controller;

@end



@interface MesExercicesViewController : UITableViewController {
NSMutableArray *exercicesList;
UISegmentedControl *segment;
}

- (IBAction)segmentChange;

@property (nonatomic, retain) IBOutlet UISegmentedControl *segment;

@property (nonatomic, weak) id <MesExercicesViewControllerDelegate> delegate;

- (IBAction)cancel:(id)sender;

- (IBAction)done:(id)sender;

@end

А вот код UISegmentedControl в UITableViewController.m

- (void)viewDidLoad {

[super viewDidLoad];
exercicesList = [NSMutableArray arrayWithObjects: 



@"A",@"A1",@"A2",@"A3",@"A4",@"A5",@"A6",@"A7", nil];
}


- (IBAction)segmentChange {
if (segment.selectedSegmentIndex == 0) {
    exercicesList = [NSMutableArray arrayWithObjects:@"A",@"A1",@"A2",@"A3",@"A4",@"A5",@"A6", nil];
    [[self tableView]reloadData]; 

} else if (segment.selectedSegmentIndex == 1) {
    exercicesList = [NSMutableArray arrayWithObjects:@"C",@"C1",@"C2",@"C3",@"C4", nil];
    [[self tableView] reloadData];

} else if (segment.selectedSegmentIndex == 2) {
    exercicesList = [NSMutableArray arrayWithObjects:@"E",@"E1",@"E2",@"E3",@"E4",@"E5",@"E6",@"E7",@"F",@"F1", nil];
    [[self tableView] reloadData];
} else if (segment.selectedSegmentIndex == 3) {
    exercicesList = [NSMutableArray arrayWithObjects:@"I",@"I1",@"I2",@"I3",@"I4",@"I5",@"I6",@"I7",@"I8",@"J", nil];
    [[self tableView] reloadData];

} else if (segment.selectedSegmentIndex == 4) {
    exercicesList = [NSMutableArray arrayWithObjects:@"L",@"M",@"M1",@"N",@"N1", nil];
    [[self tableView] reloadData];

} else if (segment.selectedSegmentIndex == 5) {
    exercicesList = [NSMutableArray arrayWithObjects:@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
    [[self tableView] reloadData];

}
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

    //reflect selection in data model
}else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;

    //reflect the deselection in data model
}

Большое спасибо за вашу помощь заранее

1 ответ

Во-первых, в вашем наборе cellForRowAtIndexPath

cell.accessoryType = UITableViewCellAccessoryNone;

таким образом, всякий раз, когда вы перезагружаете данные в вашем tableView, они избавляются от галочек. Вы можете сделать это, когда новый сегмент коснулся.

2-й править

Во-вторых, установите 2 бесплатных метода - в didSelectRow и didDeselectRow. Создайте NSMutableArray в вашем viewDidLoad и затем добавьте к нему. Так что ваш didSelectRow будет иметь:

  • (void) tableView: (UITableView *) tableView didSelectRowAtIndexPath: (NSIndexPath *) indexPath
    {
    [mutableArray addObject: [exercList objectAtIndex: indexPath.row]];
    }

и ваш didDeselectRow будет иметь

  • (void) tableView: (UITableView *) tableView didDeselectRowAtIndexPath: (NSIndexPath *) indexPath
    {
    [mutableArray removeObject: [exercList objectAtIndex: indexPath.row]];
    }

и что касается галочек, вы это реализовали?

[[self tableView] setEditing: YES animated: YES];

Затем вы должны использовать этот mutableArray для заполнения новой таблицы.

1-е РЕДАКТИРОВАНИЕ

  • Вот некоторые дополнительные подробности о том, как установить делегата

Итак, давайте вызовем VC с вашей исходной таблицей - OriginalTableViewController и VC с новой таблицей, которую вы хотите заполнить из mutableArray - NextTableViewController (лучше всего избегать слова "new" в начале любых имен...)

NextTableViewController.h - сразу после # import

@class NextTableViewController;

@protocol NextTableViewControllerDelegate  
 -(NSMutableArray*)sendThroughTheMutableArray;  
@end

объявить своего делегата

@property (nonatomic, assign) идентификатор делегата;

NextTableViewController.m

@synthesize делегат;

Затем вы можете быть знакомы с вызовами self, например: [self getThatArray]; То же самое с делегатом, но вы просто делаете вызов делегату вместо себя

Предполагается, что вы объявили myTablePopulationArray в вашем h-файле:

если (делегат!= ноль)
{
myTablePopulationArray = [[NSMutableArray Alloc] initWithArray: [делегат sendThroughTheMutableArray]];
}

На данный момент мы только что создали делегата. Мы говорим, это то, что мне нужно. Кто за это? Кто будет добровольцем для этой работы. Мы ставим if(делегат!= Ноль) в качестве обеспечения безопасности - но вы тот, кто позаботится о том, чтобы был делегат, так что вам, вероятно, он действительно не нужен

Теперь для самого делегата - вам нужно только 2 вещи:

  1. в вашем файле OriginalTableViewController.h

#import "NextTableViewController.h"

@class DetailViewController; OriginalTableViewController

  1. в вашем файле OriginalTableViewController.m вы должны поместить метод, который вы объявили ранее

    - (NSMutableArray *) sendThroughTheMutableArray
    {
    вернуть mutableArray;
    }

так что теперь этот mutableArray готов к заполнению вашего tableView.

Другие вопросы по тегам