将变量添加到所有UIViewControllers

时间:2011-02-16 06:42:53

标签: iphone objective-c-category

我有这个类(我们称之为FooViewController),它是UIViewController的子类。它应该与UINavigationController的行为类似,因为它有rootController,您可以向其中添加其他UIViewControllerUIViewController中的每个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}}。但这似乎是一种肮脏的方式。

我觉得这不应该是一件困难的事情,也许我认为这是错误的。有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:4)

不,您无法将实例变量添加到UIViewController。

子类化并不是一种糟糕的方式,考虑到它可以做的与FooViewController相关的更多事情。它不会损害类的设计,因为它们依赖于FooViewController(就像具有navigationController属性的UIViewController一样)。

另一种方法是通过应用程序委托访问FooViewController对象。但我认为这是一种肮脏的方式(因为它们现在依赖于您的应用程序委托)。