因此经过长时间的试验和错误后,我的应用程序中的用户现在可以从第一个和根Viewcontroller1中选择一行。当他这样做时,第二个Viewcontroller2打开并替换屏幕上的第一个。很棒,我到目前为止,我使用了NavigationController。
当用户选择一行时,我希望第二个Viewcontroller2显示有关选择的详细信息。例如,当你选择一头母牛时,你会看到一头牛的照片+一个解释。 当您选择匹配相同但具有其他图片和说明的马时。
为每个动物创建另一个viewcontroller似乎是不好的做法。 我该如何解决这个问题? 我听说过有关使用观点的内容吗?
我知道我必须添加一些数组,因为有多行,但我会自己解决这个问题。
感谢您阅读本文。
答案 0 :(得分:1)
你是对的,为每只动物创建一个不同的视图是不好的做法。一般方法是建立一个包含动物和解释信息的模型。视图会根据用户选择的动物进行更新。该过程由控制器处理。这称为model-view-controller。这个想法是你有一个动物细节布局,但是通过控制器使用模型更新标签,根据选择的动物显示不同的图像和解释。
Apple解释navigating data using Table Views in the developer library。我建议你也看到SimpleDrillDown sample code。
答案 1 :(得分:1)
你正处于理解的边缘
当用户选择一行时,我希望第二个Viewcontroller2显示有关选择的详细信息。
确定。好。您已确定需要第二个视图控制器,并且它应负责显示详细信息。
例如,当您选择一头母牛时,您会看到一头牛的照片+一个解释。当你选择一匹马 相同的设置但又有另一张图片和解释时 。
优异。您注意到每个人都有相同的设置。而且你也意识到在不同的视图控制器中反复重复这项工作是愚蠢的。
您需要分别保存动物的信息,并以类似的方式构建它们。这称为模型。例如。你可以创建一个具有name属性和图片属性的动物类。
@interface Animal : NSObject
@property (nonatomic, copy) NSString * name;
@property (nonatimic, strong) UIImage * picture;
@end
然后要显示任何动物,你只需要制作一个知道如何从模型中获取信息的视图控制器(类似结构的数据)并在视图中填写信息。
使用我们的示例,我们可能会在视图控制器中看到此代码
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
...
Animal * animalToDisplay = ...
self.imageView.image = animalToDisplay.picture;
self.nameLabel.text = animalToDisplay.name;
控制器之前可以将animalToDisplay
对象提供给第二个控制器,可能是在点击与动物相对应的单元格或按钮时。此视图Controller可以显示来自任何Animal
对象的数据。