No puedo conectar la fuente de datos y delegar las salidas de la vista de tabla dentro del guión gráfico a mi clase delegada personalizada. Me gustaría delegar esas funciones de tabla a otra clase. Hay algo que básicamente he malentendido con respecto a la delegación, puntos de venta y el cableado de las cosas en un guión gráfico.UITableView datasource y delegate no se conectarán a una clase personalizada
Antecedentes
Tengo un UIViewController
que tiene una vista que contiene una UIPickerView
y entre otras cosas, un UITableView
.
He llegado al punto en que mi UIViewController
es demasiado grande y me gustaría mover las funciones relacionadas con la tabla a otra clase.
He creado la siguiente clase para contener los métodos de tabla como numberOfSectionsInTableView:
.
@interface ExerciseTableDelegate : NSObject <UITableViewDelegate, UITableViewDataSource>
@property (strong, nonatomic) ExerciseDataController *dataController;
@end
He pensado poner una referencia a la clase anterior en mi UIViewController
@interface ExerciseViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
{
UIPickerView *exercisePicker;
}
@property (strong, nonatomic) IBOutlet ExerciseTableDelegate *tableDelegate;
@end
Tenía la esperanza de que dentro del guión, cuando me arrastre uno de la fuente de datos o delegar salidas de mi mesa ver en el UITableViewController
me daría la posibilidad de conectarme a mi clase delegada. No fue así.
Intenté crear un objeto dentro del guión gráfico, dándole la clase ExerciseTableDelegate
. Podría arrastrar el delegado de la vista de tabla al objeto, pero este no es el mismo objeto que configuré en mi AppDelegate
.
Mi aplicación delegado
- (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;
}
- ¿Necesito hacer mi objeto un producto único y todavía inicializar en el delegado?
- ¿Tengo que hacer esta configuración en código en lugar de en el Storyboard?
- ¿Es incorrecto crear un objeto en el guión gráfico?
Siento que estoy cerca, pero creo que estoy haciendo demasiado.
Gracias @jrturton. Eso hizo el truco. Además de eso, necesitaba hacer lo estándar para crear un IBOutlet para el TableView de ExerciseViewControllers y necesitaba conectarlo en el storyboard. – AllTheThingsICanDo