Nie mogę połączyć źródła danych i przekazać ujścia widoku tabeli w scenorysie do mojej niestandardowej klasy delegowanej. Chciałbym delegować te funkcje tabel do innej klasy. Jest coś, czego zasadniczo nie rozumiem w odniesieniu do delegacji, rynków zbytu i okablowania w scenorysie.Źródło danych i delegata UITableView nie połączy się z niestandardową klasą
Tło
mam UIViewController
że ma widok zawierający UIPickerView
i między innymi, UITableView
.
Osiągnąłem punkt, w którym mój UIViewController
jest zbyt duży i chciałbym przenieść funkcje związane z tabelą do innej klasy.
Utworzono następującą klasę zawierającą te metody tabel, takie jak numberOfSectionsInTableView:
.
@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) ExerciseDataController *dataController;
@end
myślałem umieścić odniesienie do klasy wyżej w moim UIViewController
@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
UIPickerView *exercisePicker;
}
@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate;
@end
miałem nadzieję, że w serii ujęć, kiedy przeciągnij jeden z DataSource lub delegatów placówek moim stole widok na UITableViewController
dałby mi możliwość połączenia się z moją delegowaną klasą. Tak nie było.
Następnie próbowałem utworzyć obiekt w serii ujęć, nadając mu klasę ExerciseTableDelegate
. Mogłem wtedy przeciągnąć delegata widoku tabeli do obiektu, ale nie jest to ten sam obiekt, który ustawiłem w moim AppDelegate
.
Moja aplikacja delegat
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
ExerciseViewController *rootViewController = (ExerciseViewController *)[[navigationController viewControllers] objectAtIndex:0];
ExerciseTableDelegate *tableDelegate = [[ExerciseTableDelegate alloc]init];
ExerciseDataController *dataController = [[ExerciseDataController alloc] init];
tableDelegate.dataController = dataController;
rootViewController.tableDelegate = tableDelegate;
// Override point for customization after application launch.
return YES;
}
- Czy muszę zrobić mój obiekt singleton i nadal zainicjować go w delegata?
- Czy muszę wykonać tę konfigurację w kodzie zamiast w Storyboard ?
- Czy tworzenie obiektu w storybooku jest niewłaściwe?
Czuję, że jestem blisko, ale myślę, że robię za dużo.
Dziękuję @jrturton. To wystarczyło. Oprócz tego, musiałem zrobić standardową rzecz, aby stworzyć IBOutlet dla ExerciseViewControllers tableView i potrzebowałem podłączyć to do storyboardu. – AllTheThingsICanDo