Как я сбрасываю UINavigationController?

Так как библиотечная функция возвращает A, Вы не можете заставить ее возвратить B, не изменяя ее.

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

class A: # defined by the library
    def __init__(self, field):
        self.field = field

class B(A): # your fancy new class
    def __init__(self, field, field2):
        self.field = field
        self.field2 = field2 # B has some fancy extra stuff

def b_from_a(a_instance, field2):
    """Given an instance of A, return a new instance of B."""
    return B(a_instance.field, field2)


a = A("spam") # this could be your A instance from the library
b = b_from_a(a, "ham") # make a new B which has the data from a

print b.field, b.field2 # prints "spam ham"

Редактирование: в зависимости от Вашей ситуации состав вместо наследования мог быть хорошей ставкой; это - Ваш класс B, мог просто содержать экземпляр вместо наследования:

class B2: # doesn't have to inherit from A
    def __init__(self, a, field2):
        self._a = a # using composition instead
        self.field2 = field2

    @property
    def field(self): # pass accesses to a
        return self._a.field
    # could provide setter, deleter, etc

a = A("spam")
b = B2(a, "ham")

print b.field, b.field2 # prints "spam ham"
6
задан drisse 26 October 2009 в 07:04
поделиться

1 ответ

Как только вы перейдете к контроллеру корневого представления, он будет "сброшен". Следующим вашим действием с navigationController должно быть нажатие (или повторное нажатие) соответствующего контроллера представления. Вы не должны пытаться «перемещаться» по стеку.

ОБНОВЛЕНО:

Я создал проект iPhone, основанный на навигации, чтобы проверить ваш код, и он работает. Каждое из трех моих представлений имеет одну кнопку, которая при нажатии отправляет своему контроллеру сообщение IBAction.

Вот мой код:

RootViewController.h:

@class SecondViewController;

@interface RootViewController : UIViewController {
    SecondViewController *secondViewController;
}

@property (nonatomic, retain) SecondViewController *secondViewController;

- (IBAction)pushSecondVC;

@end

RootViewController.m:

#import "RootViewController.h"
#import "SecondViewController.h"

@implementation RootViewController

@synthesize secondViewController;

- (IBAction)pushSecondVC {
    if(self.secondViewController == nil)
    {
        SecondViewController *secondVC = [[SecondViewController alloc] init];
        self.secondViewController = secondVC;
        [secondVC release];
    }
    [self.navigationController pushViewController:self.secondViewController animated:NO];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"Root View";
}

SecondViewController.h:

#import <UIKit/UIKit.h>

@class ThirdViewController;

@interface SecondViewController : UIViewController {
    ThirdViewController *thirdViewController;
}

@property (nonatomic, retain) ThirdViewController *thirdViewController;

- (IBAction)pushThirdVC;

@end

SecondViewController.m:

#import "SecondViewController.h"
#import "ThirdViewController.h"

@implementation SecondViewController

@synthesize thirdViewController;

- (IBAction)pushThirdVC {
    if(self.thirdViewController == nil)
    {
        ThirdViewController *thirdVC = [[ThirdViewController alloc] initWithNibName:nil bundle:[NSBundle mainBundle]];
        self.thirdViewController = thirdVC;
        [thirdVC release];
    }
    [self.navigationController pushViewController:self.thirdViewController animated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"2nd View";
}

ThirdViewController.h:

#import <UIKit/UIKit.h>

@interface ThirdViewController : UIViewController {
}

- (IBAction)popToRoot;

@end

ThirdViewController.m:

#import "ThirdViewController.h"

@implementation ThirdViewController

- (IBAction)popToRoot {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    self.title = @"3rd View";
}
2
ответ дан 17 December 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: