Вставка данных из одной таблицы в другую таблицу - PullRequest
1 голос
/ 08 февраля 2012

У меня есть два класса UITableViewController, MainTableController и SubTableController.

Из класса AppDelegate я вызываю класс MainTableController.

Сначала этот класс пуст, и в этом классе есть кнопка с именем "Показать список". Когда я нажимаю на эту кнопку, я перехожу к SubTableController и там у меня есть список действий в виде таблицы.
Теперь, если я выберу первое действие в ячейке, то имя этого действия должно появиться в моей первой ячейке таблицы в MainTableController. Но я не могу напечатать это имя в таблице класса MainTableController.

В SubTableController:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];  
    self.chooseActions = actionListObj.actionName;
    MainTableController * mainViewController = [[MainTableController alloc] init];      
    [mainViewController getAction:self.chooseActions];
    [self.navigationController dismissModalViewControllerAnimated:YES];
}

В MainTableController:

-(void) viewWillAppear:(BOOL)animated{
    [self reloadData];
}

-(void) reloadData{
    [self.myTableView reloadData];
}

-(void) getAction: (NSString *) actionChoose{        
    self.action = actionChoose;
    [self reloadData];
}       

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    // Configure the cell...
    cell.textLabel.text = self.action;
    return cell;
}

Когда я отлаживаю, в MainTableController я получаю действие в методе getAction, но в текстовой строке ячейки таблицы - ноль.

Может кто-нибудь, пожалуйста, помогите мне в этом? Где я иду не так?

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

В didSelectRowAtIndexPath класса SubTableController вы выделяете новые MainTableController для отправки данных.

MainTableController * mainViewController = [[MainTableController alloc] init];      
[mainViewController getAction:self.chooseActions];

Вы не должны делать это так.Потому что существующий mainview будет отличаться от вновь выделенного.Вы должны использовать delegate, чтобы вернуть данные.Для получения дополнительной информации о протоколах и делегатах, см. Здесь

Больше примеров здесь

1 голос
/ 08 февраля 2012

Вы выделяете и инициализируете новый контроллер вида каждый раз, когда выбираете ячейку в SubTableController.

MainTableController * mainViewController = [[MainTableController alloc] init];

и, конечно, это не то, что есть в стеке навигации.

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

В SubTableController добавьте свойство и синтезируйте его:

@property(readwrite, assign) MainViewController *mainViewController;
// and ...
@synthesize mainViewController;

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

// in main view controller
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // alloc/init the sub VC
    subVCInstance.mainViewController = self;
    [self pushViewController:subVCInstance ......

Теперь, когда в вспомогательной строке выбрана строка, отправьте сообщение основной, без alloc / init нового MainViewController объекта:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ActionList * actionListObj = [appDelegate.actionArray objectAtIndex:indexPath.row];  
    self.chooseActions = actionListObj.actionName;
    //MainTableController * mainViewController = [[MainTableController alloc] init];      
    [self.mainViewController getAction:self.chooseActions];
    [self.navigationController dismissModalViewControllerAnimated:YES];
}

Это должно работать просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...