2011-12-28 82 views
4

我有一个自定义ViewController,它可以重复使用,任意数量的实例将在Storyboard中的NavigationController中链接在一起,所有实例都与代理共享同一模型。iOS:从Storyboard中唯一标识ViewControllers

ViewController需要告诉模型他们是哪个实例。目前,他们有一个int属性,他们从segue中获得,但它看起来不太习惯,并且不适合在屏幕上有多个实例(对于iPad)。我认为这应该是一个更干净的方式来做到这一点,所以有人知道它是什么?谢谢。

结果:self.view.tag

回答

7

一个UIViewController的UIView的具有tag属性,你可以从任何你想要的设置。您也可以简单地使用[self class]来识别控制器的类型。或直接通过参考控制器来使用内存位置。

更新您可以简单地使用类别实现UIViewController的唯一标识符。

+0

“标识符”看起来很有希望,但实际上它并不是UIViewController的属性。这些是同一个类的实例,因此'[self class]'将不起作用,并且如果控制器被重新分配,则内存位置会改变。 – mgold 2011-12-28 20:25:56

+0

@mgold哦,原来在控制器中实际上没有标识符。奇怪,因为Xcode确实在IB中显示它。我建议你自己实现它,通过使用所有控制器实现的协议。另外:一旦你释放,'identifier'也会消失,而且我很确定内存地址在正常操作期间不会移动。 – 2011-12-28 20:28:45

+0

这基本上是我所做的,但我找不到一个设置标识符的好方法。由于实例已经布置,所以在SToryboard/IB中使用字段将是理想的。 – mgold 2011-12-28 20:31:06

1

我想在设计架构方面“最干净”的方式可能是一个ViewControllers数组。 (它可以在应用程序委托中进行管理)。但是,存在内存方面的考虑因素 - 您可能希望在iPhone上创建并根据需要销毁视图控制器。该阵列可能包含identifier以及其他一些与模型相关的信息,以便根据需要重新创建控制器。

0

太糟糕了没有UIViewController的属性storyboardIdentifier。它们可以用这个id实例化,但如果viewcontroller可以查询它的id,它会有帮助。