Obj-c, если я использую методы получения и установки для экрана выбора, вставленного в навигацию, где я могу вернуть свое значение, viewWillAppear? - PullRequest
0 голосов
/ 27 января 2011

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

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

Экран выбора запускается и определяется только в моей кнопке панели навигации.

Должен ли я объявить viewController в моем интерфейсе родительского экрана?

Ответы [ 2 ]

0 голосов
/ 27 января 2011

Есть много способов сделать это, и с течением времени я работал над программным обеспечением для iPhone, с которым я экспериментировал с большинством из них.Вот один из них.

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

ChildViewController.h

#import "ParentViewController.h"

@interface ChildViewController : UIViewController
{
    ParentViewController *parentViewController;
}

@property (nonatomic, retain) ParentViewController *parentViewController;

ChildViewController.m

@implementation ChildViewController

@synthesize parentViewController;

-(void)dealloc
{
    [parentViewController release];
}

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

ChildViewController *child = [[ChildViewController alloc] initWithNib:@"nibName" withBundle:nil];
child.parentViewController = self;
[self.navigationController pushViewController:child animated:YES];
[child release];

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

self.parentViewController.dataField = @"My data for an NSString property of the parent view controller!";

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

(Весь код в этом ответе был напечатан прямо здесь и предназначен только для примера - я не даю никаких обещаний относительно орфографии, синтаксиса и т. Д.)

0 голосов
/ 27 января 2011

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

Чтобы найти его, UINavigationController имеет метод, описанный выше:

viewControllers

Контроллеры представления, находящиеся в данный момент в стеке навигации.@property (nonatomic, copy) NSArray * viewControllers Обсуждение

Контроллер корневого представления имеет индекс 0 в массиве, контроллер заднего обзора имеет индекс> n-2, а верхний контроллер - индекс n-1, где n - количество элементов в массиве.

Вкратце: ваш родительский контроллер представления находится на n-2.

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