1

いくつかのコントローラーによってサブクラス化されたストーリーボードの画面を設計しました。デザインはどれも同じです。

次に、画面をロードする必要があります。によると、クラスからプログラムでストーリーボードをロードするにはどうすればよいですか? 、 そうです:

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;
}
4

1 に答える 1

1

ストーリーボード ビュー コントローラーは、ストーリーボードで選択したクラスで常にインスタンス化されます。「ビュー」をインポートしてカスタムコントローラーを持つことはできません。

設計を複製するか、View Controller の構築方法をリファクタリングする必要があります。1 つのオプションは、埋め込みビュー コントローラーです。

于 2013-07-09T17:49:09.073 に答える