Ios 故事板中的组件重用

Ios 故事板中的组件重用,ios,xcode,cocoa-touch,xcode-storyboard,Ios,Xcode,Cocoa Touch,Xcode Storyboard,我是iOS开发新手,有几年的Android经验。我直接从XCode 5和故事板范例开始。我喜欢用可视化的方法来勾勒出应用程序的流程,但依我看,它并没有真正强制组件重用,或者我不知道如何做到这一点 我有一个实际的问题,这是如下所示:与典型的主-细节方法不同,我有一种情况,在这种情况下,单击一个TableView单元格会强制推送到另一个TableView,它看起来相同,行为也相同。我希望在整个应用程序中重用两种特定类型的TableViewCell,因此我不能将第一个TableViewControll

我是iOS开发新手,有几年的Android经验。我直接从XCode 5和故事板范例开始。我喜欢用可视化的方法来勾勒出应用程序的流程,但依我看,它并没有真正强制组件重用,或者我不知道如何做到这一点

我有一个实际的问题,这是如下所示:与典型的主-细节方法不同,我有一种情况,在这种情况下,单击一个TableView单元格会强制推送到另一个TableView,它看起来相同,行为也相同。我希望在整个应用程序中重用两种特定类型的TableViewCell,因此我不能将第一个TableViewController复制几次。我需要一种类型的TableViewCell中的更改在任何地方都会受到影响,Tableview的外观和行为也是如此。有点像重用一个组件,你会得到我希望的结果

我尝试在单独的xib文件中创建自定义TableView和TableViewCell,并将其连接到自定义控制器类。然而,当我想在情节提要中重用该控制器类时,我无法从单元到下一个单元进行切换,因为只显示视图控制器,但内部没有视图

也许,我做错了。也许,我应该制作一个单一的控制器,如果可能的话,强迫它自动执行,不知道


您会怎么做?

您可以从所选的DID执行编程顺序

#导入“someVC.h”

然后当你想转到新的VC

// Create a VC and remember to set the Storyboard ID of someVC (example someVCID)
someVC *newView = [self.storyboard instantiateViewControllerWithIdentifier:@"someVCID"];

// Can't remember how this works but you can change the Transition method
// newView.modalTransitionStyle = UIModalTransition;

// If you want to pass data, setup someArray in the someVC .h with @property (nonatomic, strong) NSArray *someArray;
newView.someArray = MyLocalArray;

// Animated or not
[self presentViewController:newView animated:NO completion:nil];

如果您试图在同一
UITableView
上执行一个序列,您可以通过

为了完整起见,我将报告其中包含的内容:

如果您使用的是动态单元原型,那么显然您可以进行一系列操作 从表视图单元格到控制器,没有任何问题

当您完成您的segue时,您将得到:

但是让我们想象一下,有一些原因是不存在的 为您工作,例如,您无法从手机中获得segue(例如 例如,您需要从
didselectrowatinexpath
调用segue,而不是 选择单元格时)。在这种情况下,您不能使用以前的 技术

在这种情况下,有两种选择:

  • 同样,如果只支持iOS 6及以上版本,请使用上述技术,但(a)确保
    didSelectRowAtIndexPath
    发送者使用
    self
    ,然后
    shouldPerformSegueWithIdentifier
    仅当
    发送方
    ==self
    (因此当
    发送方
    是表视图单元格时,它将被取消)

  • 也许更容易,只要不定义序列,手动选择您的
    didSelectRowAtIndexPath
    然后推送/呈现 视情况而定的视图控制器;或

  • 您可以使用以下笨拙的变通方法:简而言之,将按钮添加到视图控制器(将其向下拖动到 底部),它不会显示在视图上,但您可以使用它的 塞格斯。因此,首先,将圆角按钮拖动到 场景底部:

    现在,您可以从该按钮切换到视图控制器:

    因此,你最终又回到了自我参照的阶段:

    您必须给该序列一个标识符,以便可以调用它 通过
    performsguewithidentifier
    以编程方式进行,但它可以工作。不 最优雅的解决方案,但我认为这比拥有 故事板上的额外场景

  • 这些都不是理想的,但你有很多选择


    嗯。。在iOs中,换个角度考虑,如果我是你,我会创建多个
    ViewController
    ,即使它们几乎相同,并创建一个自定义单元格类,并使此单元格具有一个配置块。 现在,对于每个
    ViewController
    ((或
    TableViewController
    ),您可以重用相同的自定义
    UITableViewCell
    ,只需将每种情况略有不同的内容传递给它,而且您还可以创建一个具有一般配置的
    BaseTableViewController
    ,并在每个
    ViewController
    中传递所需的自定义更改

    想想看,当你看你的故事板时,你将能够看到你所有的工作流程,当出现问题时,你将能够调试,如果你要使用你建议的,调试将是一个真正的痛苦,我想


    无论如何,尝试一下,如果你需要进一步的澄清,问更多

    你能试着更具体一点吗?添加一些关于您正在尝试执行的操作的代码…您好。您是否仅对细胞使用XIB?或者你也有定制课程?欢迎来到iOS开发的精彩世界!我建议您重新考虑是否真的要使用故事板:+1。这也是我推荐的解决方案,但为了不混淆OP,我想指出,这根本不使用segue。这是使用
    UINavigationController
    的老方法,您只需实例化下一个VC并手动推送它。当分段不适合您的需要时,降低到较低级别没有什么错!如果OP实际使用的是
    UINavigationController
    ,那么最后一行应该是
    [self.navigationController-pushViewController:newView-animated:YES]
    :)