将变量添加到所有UIViewControllers

我有这个类(我们称之为
FooViewController
),它是
UIViewController
的子类。它应该与
UINavigationController
类似,因为它有一个
rootController
,你可以添加其他
UIViewController
s。并且每个
UIViewController
FooViewController
内可以创建另一个
UIViewController
并将新的
UIViewController
推到
FooViewController
。 这是我的意思的一个例子。当您向项目添加新的
UITableViewController
时,这是自动创建的代码。
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"Nib name" bundle:nil];
// ...
// Pass the selected object to the new view controller.
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController release];
这是一个问题:我怎么能在所有
UIViewController
s中都有像
navigationController
这样的变量?就像您可以使用类别向现有类添加方法一样,您是否也可以向现有类添加变量?听起来像联想参考是我正在寻找的,但它只能在Mac上使用。 对我有用的一个解决方案是子类化我可能使用的所有
UIViewController
s,并让我的实际类子类从那些子类中删除。例如,我可能会这样做:
@interface FooUIViewController : UIViewController {
    FooViewController *fooViewController;
}

@interface FooUITableViewController : UITableViewController {
    FooViewController *fooViewController;
}
所以我能做到:
[self.fooViewController pushViewController:detailViewController];
。但这似乎是一种肮脏的方式。 我觉得这不应该是一件困难的事情,也许我认为这是错误的。有什么想法吗?谢谢!     
已邀请:
不,您无法将实例变量添加到UIViewController。 考虑到与FooViewController相关的更多事情,子类化并不是一种糟糕的做法。它不会损害类的设计,因为它们依赖于FooViewController(就像具有navigationController属性的UIViewController一样)。 另一种方法是通过应用程序委托访问FooViewController对象。但我认为这是一种肮脏的方式(因为它们现在依赖于您的应用程序委托)。     

要回复问题请先登录注册