重用一个UIViewController

时间:2013-08-12 16:47:02

标签: objective-c uiviewcontroller

我希望有一个静态分组的uitableview,用户在每个单元格上单击它会将他带到另一个uiviewcontroller,他需要通过xcode提供的各种工具提供信息。 下面是一个例子:

第一个单元格会将他带到vc,用户将输入姓名,中间名和姓氏。

第二个单元格将允许用户选择日期和时间。 第三个单元格将允许用户输入地址, 等等,我将有大约6-8个细胞

唯一的答案是拥有很多viewcontrollers @ storyboard / nib文件吗? 或者有一些方法可以使用1个视图控制器完成所有操作,视图控制器将根据您选择的单元格而改变? 我问,因为我想考虑性能并使应用程序更具活力。

2 个答案:

答案 0 :(得分:0)

您可以使用相同的Xib,并可根据您的要求更改标签文本。 一次,您正在选择一个单元格,根据您可以传递整数的单元格选择,在第二个控制器的viewDidLoad中,您可以隐藏不需要的UI元素。

如果您使用的是StoryBoard,可以使用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [self performSegueWithIdentifier: @"MySegue" sender: self];
}

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"MySegue"]){
      StoryDetails *controller = (StoryDetails *)segue.destinationViewController;
      controller.dataModel= storyModel;         //pass the data here

}

如果是Xib:

YourViewController *controller=[[YourViewController alloc]initWithNibName:@"ViewControllerName" bundle:nil];
 controller.dataModel= storyModel;         //pass the data here
[self presentViewController:viewController animated:YES completion:nil];

答案 1 :(得分:0)

在您的情况下,我更愿意按功能分离出所有不同的viewControllers。如果你去使用标签的路线以编程方式隐藏你不需要这个功能的UIControls,你将会有很多代码味道。随着你添加更多功能,xib和.h / .m将变得更加复杂。

//tableViewDidSelectRow...
if (indexPath.row == 0) {
    ViewControllerName *nameView = ...
    //display this view...
} else if (indexPath.row == 1) {
    ViewControllerDate *dateView = ...
    //display this view...
} else if (indexPath.row == 2) {
    ViewControllerAddress *addressView = ...
    //etc etc etc
}