我有这个类(我们称之为FooViewController
),它是UIViewController
的子类。它应该与UINavigationController
的行为类似,因为它有rootController
,您可以向其中添加其他UIViewController
。 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];
以下是问题:如何在navigationController
的所有UIViewController
中添加UIViewController
这样的变量?就像您可以使用类别向现有类添加方法一样,您是否也可以向现有类添加变量?听起来Associative References是我正在寻找的,但它只能在Mac上使用。
对我有用的一个解决方案是将我可能使用的所有@interface FooUIViewController : UIViewController {
FooViewController *fooViewController;
}
@interface FooUITableViewController : UITableViewController {
FooViewController *fooViewController;
}
子类化,并将我的实际类子类化为子类。例如,我可能会这样做:
[self.fooViewController pushViewController:detailViewController];
所以我可以这样做:{{1}}。但这似乎是一种肮脏的方式。
我觉得这不应该是一件困难的事情,也许我认为这是错误的。有什么想法吗?谢谢!
答案 0 :(得分:4)
不,您无法将实例变量添加到UIViewController。
子类化并不是一种糟糕的方式,考虑到它可以做的与FooViewController相关的更多事情。它不会损害类的设计,因为它们依赖于FooViewController(就像具有navigationController属性的UIViewController一样)。
另一种方法是通过应用程序委托访问FooViewController对象。但我认为这是一种肮脏的方式(因为它们现在依赖于您的应用程序委托)。