Próbowałem sugestii Alexa kupując kategorię dla UIViewController i działało w symulatorze, ale nie na moim telefonie. tutaj jest kategoria
@interface UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent;
@end
@implementation UIViewController (parentSetter)
-(void)setParentUIViewController:(UIViewController*)parent
{
_parentViewController = parent;
}
@end
Kompiluje się i działa dobrze, ale zwróć uwagę na element podkreślenia, który jest nieco odkładany. To powoduje błąd linkera podczas kompilacji z pakietem SDK 3.0.
Mam widok kontenera, który ma 2 subviews, a tabela jest jednym z nich. Tabela potrzebuje rodzica, aby między innymi móc wchodzić w interakcję z paskiem nawigacyjnym.
Idę z tego rozwiązania zamiast:
@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];
}
Wszystkie moje Table View kontrolerów są teraz adoptedTableViewControllers. Głównym powodem, dla którego potrzebują oni rodziców, jest możliwość przesyłania kontrolerów widoku na stos nawigacyjny, dzięki czemu jest on obsługiwany w sposób przezroczysty przez moduł pobierania kontrolera nawigacyjnego.
Byłoby miło, gdyby parentViewController nie były tylko do odczytu, ale w moim chwalić z _parentViewController odkryłem, że jest więcej do hierarchii ViewController niż tylko tej właściwości. Myślę, że w tej relacji może być wiele sprzężeń i obowiązków, których Apple nie posprzątało wystarczająco dla mas. Na przykład zauważyłem dziwne zachowanie cofnięcia wyboru podczas przechodzenia w górę hierarchii nawigacji, której nie mogłem naprawić.Być może kontrolery UINavigation odzwierciedlają klasę swojego top kontrolera i zachowują się inaczej?
W skrócie, jest to naprawdę tylko do odczytu i nie ma czystego ani prostego rozwiązania. Po prostu masz wokół architekta.
Myślę, że każdy, kto zagłosuje na każdą odpowiedź w tym wątku, mógł podać powód: – willcodejavaforfood
To nie byłem ja, ale podejrzewam, że nie zgadzają się z używaniem prywatnych interfejsów API i wydaje się, że porady dotyczące korzystania z prywatnych interfejsów API często na SO. Może to mole jabłkowe. –