いくつかのコントローラーによってサブクラス化されたストーリーボードの画面を設計しました。デザインはどれも同じです。
次に、画面をロードする必要があります。によると、クラスからプログラムでストーリーボードをロードするにはどうすればよいですか? 、 そうです:
UIStoryboard *b = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SearchViewController *c = [b instantiateViewControllerWithIdentifier:@"SearchViewController"];
return c;
ただし、これはサブクラスではなく基本クラスをロードします。(ベースクラスは SearchViewController、サブクラスは SearchCustomerViewController)。私は何ができますか?
PD: 基本クラスとサブクラスのコードは次のとおりです。
@interface SearchViewController : UIViewController
<SqliteDataSource>
- (IBAction)showMenu:(id)sender;
- (IBAction)addNew:(id)sender;
- (id)initWithRouterParams:(NSDictionary *)params;
@property (strong, nonatomic) NSDictionary *params;
@property (weak, nonatomic) IBOutlet SearchBar *editSearch;
@property (weak, nonatomic) IBOutlet UITableView *searchResults;
@property (weak, nonatomic) IBOutlet UIToolbar *barActions;
+ (id)load:(Class)name;
@end
@implementation SearchViewController
+ (id)allocWithRouterParams:(NSDictionary *)params {
UIStoryboard *b = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
SearchViewController *c = [b instantiateViewControllerWithIdentifier:@"SearchViewController"];
return c;
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.editSearch.hideTable = NO;
[self.editSearch becomeFirstResponder];
}
+ (id)load:(Class)name {
return [name allocWithRouterParams:nil];
}
@interface CustomerListViewController : SearchViewController
@property (weak, nonatomic) CustomerModel *customerData;
@end
-(void) viewDidLoad {
[super viewDidLoad];
self.customerData = [CustomerModel setupController:self searchResult:self.searchResults searchCustomer:self.editSearch hideTable:NO onSelectModel:^(NSMutableDictionary *data) {
NSInteger theId = [data[@"id"] integerValue];
[self setCustomer:[[Db currentDb] loadById:[Customer class] theId:theId]];
}];
self.customerData.filter = CUSTOMER_FILTER_NONE;
}