Передача строки indexpath назад в родительское представление - PullRequest
1 голос
/ 31 января 2012

У меня есть два UITableview.Первый показывает 3 раздела по 3 строки в каждом, это макет по умолчанию.Когда пользователь нажимает строку 2, раздел 0, отображается второй вид для выбора значения.Как только значение выбрано, оно возвращается к первому виду, но на этот раз с другим макетом.В зависимости от выбранного значения, первый вид может отображать только один, два или три раздела.Я пытаюсь добиться такого поведения, передавая путь индекса из дочернего представления в родительский и динамически изменяя количество разделов.Я получаю номер строки, выбранной в дочернем представлении, но как только она передается в родительское представление, номера строк получают ноль.

Код для дочернего представления:

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
          [tableView deselectRowAtIndexPath:indexPath animated:YES];
          NSUInteger row = indexPath.row;
          //Create parent view instance to pass back indexpath as a integer
          DiarioA *plc = [[DiarioA alloc] init];
          NSInteger i1 = row; 
          plc.rowTipo = i1;
          [plc release];
          [self.navigationController popViewControllerAnimated:YES];
}
Pa

ретроспективный просмотр (DiarioA.h)

@property (nonatomic, assign) int rowTipo;

PArent-просмотр (Diario.m)

@synthesize rowTipo;

- (void)viewWillAppear:(BOOL)animated{
       [self.tableView reloadData];
       //Check if rowTipo has value
       NSLog(@"RowTipo: %d",rowTipo);
  }

//Use rowTipo to dynamically adjust uitableview layout.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
      if (self.rowTipo==0) {
          return 3;
      }
      return self.rowTipo;
   }

Не могли бы вы помочь мне определить, почему я теряю путь индекса, который идет от дочернего просмотра к родительскому.Ваша помощь очень ценится.

Ответы [ 2 ]

3 голосов
/ 31 января 2012

DiarioA *plc = [[DiarioA alloc] init]; вы создаете здесь новый объект, и установка plc.rowTipo = i1; изменяет значение этого объекта, а не родительского объекта. Либо вы передаете свой родительский объект дочернему контроллеру, а затем измените его значение следующим образом.

// child .h file

DiarioA *plc;
@property (nonatomic, assign) DiarioA *plc;

//child .m file
@synthesize plc;

// code when you push your child controller
ChildController *controller = [[ChildController allo] initWithNibName.....];
controller.plc = self

и

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
          [tableView deselectRowAtIndexPath:indexPath animated:YES];
          NSUInteger row = indexPath.row;
          plc.rowTipo = row;
          [self.navigationController popViewControllerAnimated:YES];
}
2 голосов
/ 31 января 2012

Я думаю, вы должны составить протокол вашего дочернего контроллера представления и сделать ваш родительский контроллер представления его делегатом.Затем просто установите свойство делегата после инициализации дочернего контроллера представления и вызовите метод делегата, отправив туда indexpath.

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