Per quanto ne so, questo non è possibile poiché lo storyboard framework chiama semplicemente alloc
e init
sulla classe definita in Interfacebuilder. Inoltre l'attributo destinationViewController
del seguito è di sola lettura, quindi non è possibile semplicemente sostituire il ViewController esistente.
L'unico modo per utilizzare storyboarding sarebbe probabilmente per creare un involucro di classe che istanzia internamente il SFListViewController
con gli attributi desiderati e quindi funziona come un oggetto proxy e quindi si propaga viewDid***
e viewWill***
-metodi alla classe avvolto e anche ritorno la vista del VC spostato in una proprietà view
in sola lettura ... Hai un'idea.
Generalmente ci sono un certo numero di modi alternativi per inizializzare un UIViewController
in un caso del genere:
C'è un'opzione per specificare "runtime definito gli attributi utente" che potrebbero essere utilizzati per l'inizializzazione.
Ignora il metodo prepareForSegue:
, come hai provato, nel tuo ViewController root e fai "post-allocazione-init-inizializzazione" lì.
Se il problema peggiore si verifica, è possibile tornare a un valore IBAction
per poter inizializzare il ViewController.
Spero che questo aiuti.
Edit: posso verificare che il proxy-approccio funziona da quando sono appena imbattuto in un problema simile con ABPeoplePickerNavigationController
in cui questo approccio ha funzionato bene. Poiché abbiamo impostato la cosa nella nostra story board, tieni presente che devi utilizzare awakeFromNib
per eseguire la configurazione iniziale (invece del metodo init
).
Questo è il codice per la mia classe wrapper:
#import "PeoplePickerViewControllerWrapper.h"
@implementation PeoplePickerViewControllerWrapper
@synthesize ppvc = _ppvc; // This is the object I'm proxying (The proxyee so to speak)
@synthesize delegate = _delegate;
- (void)awakeFromNib
{
self.ppvc = [[ABPeoplePickerNavigationController alloc] init ];
self.ppvc.peoplePickerDelegate = self;
self.ppvc.addressBook = ABAddressBookCreate();
self.ppvc.displayedProperties = [NSArray arrayWithObject:[NSNumber numberWithInt:kABPersonPhoneProperty]];
}
#pragma mark - View lifecycle
- (void)loadView
{
[super loadView];
[self.ppvc loadView];
}
- (void)viewDidLoad
{
[super viewDidLoad];
[self.ppvc viewDidLoad];
}
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self.ppvc viewWillAppear:animated];
}
-(void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self.ppvc viewDidDisappear:animated];
}
-(UIView *)view{
return self.ppvc.view;
}
- (void)viewDidUnload
{
[super viewDidUnload];
[self.ppvc viewDidUnload];
}
+1 Questa è una buona domanda, ho avuto un problema simile quando lasciando Interface Builder istanziare oggetti. – Besi