Probé la sugerencia de Alex de comprar una categoría para UIViewController, y funcionó en el simulador, pero no en mi teléfono. aquí es la categoría
@interface UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent;
@end
@implementation UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent
{
_parentViewController = parent;
}
@end
Se compila y funciona bien, pero tenga en cuenta el miembro subrayado que es un poco desagradable. Eso es lo que causa el error del vinculador al compilar contra el SDK 3.0.
Tengo una vista de contenedor que tiene 2 subvistas y una tabla es una de ellas. La tabla necesita un padre para que pueda interactuar con la barra de navegación, entre otras cosas.
Voy con esta solución en su lugar:
@interface AdoptedTableViewController : UITableViewController {
UIViewController* surrogateParent;
}
-(UINavigationController*)navigationController;
@property (nonatomic, assign) IBOutlet UIViewController *surrogateParent;
@end
@implementation AdoptedTableViewController
@synthesize surrogateParent;
-(UINavigationController*)navigationController
{
if([super navigationController])//self.navigationController)
{
return [super navigationController];
}
else
{
return surrogateParent.navigationController;
}
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
Todos mis controladores de vista tabla son ahora adoptedTableViewControllers. La razón principal por la que necesitan padres es para que puedan enviar controladores de vista a la pila de navegación, de modo que el controlador de navegación los maneje de forma transparente.
Sería bueno si parentViewController no fuera de solo lectura, pero en mi conversación con _parentViewController descubrí que hay más en la jerarquía de ViewController que solo esa propiedad. Creo que podría haber una gran cantidad de relaciones y responsabilidades en esa relación que Apple no ha limpiado lo suficiente para las masas. Por ejemplo, noté un extraño comportamiento de deselección al subir la jerarquía de navegación que no pude solucionar.Quizás los controladores de navegación de UIN reflejan la clase de su controlador superior y se comportan de manera diferente?
En resumen, realmente es de solo lectura y no hay una solución limpia o simple. Usted acaba de llegar a ser un arquitecto al respecto.
Creo que cualquiera que haya votado cada respuesta en este hilo podría dar una razón para ello :) – willcodejavaforfood
No fui yo, pero sospecho que no están de acuerdo con el uso de API privadas, y el consejo de votar para usar API privadas parece ser común en SO. Quizás sean lunares de Apple. –