Iphone Xcode/Obj-c-Segue推送新实例

Iphone Xcode/Obj-c-Segue推送新实例,iphone,ios,objective-c,xcode,Iphone,Ios,Objective C,Xcode,我在Stackoverflow上看到过很多类似的问题,我尝试了很多方法,但我似乎无法解决这个问题。我有多个TableViewController和一个MainViewController。MainViewController具有调用不同tableViewController的按钮,在选择tablecell时,tableViewController将取消 问题是,每次我从任何一个TableViewController推送时,我都会推送MainViewController的一个新实例。我目前使用Se

我在Stackoverflow上看到过很多类似的问题,我尝试了很多方法,但我似乎无法解决这个问题。我有多个TableViewController和一个MainViewController。MainViewController具有调用不同tableViewController的按钮,在选择tablecell时,tableViewController将取消

问题是,每次我从任何一个TableViewController推送时,我都会推送MainViewController的一个新实例。我目前使用Segues在这些不同的控制器之间进行推送

简而言之:当从TableViewController切换到ViewController时,我希望防止ViewController作为新实例被推送,因为这样会删除以前的数据输入

我很确定我必须使用以下两种方法之一:

[self dismissModalViewController: withCompletion:]
performSegue
prepareForSegue
或者在一个类中设置一些全局变量并调用这些变量,但我还没有足够的经验来正确实现这一点

最终结果的一个简单示例是:VC中的3个文本字段。单击textfield1将打开tableview1,单击单元格将更新textfield1。Textfield2打开tableview2等

希望我足够清楚,可以张贴样本代码,如果需要

编辑、发布代码(请记住,分段是在情节提要中执行的): TableViewExample.h:

@interface IndustryViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

NSArray *tableViewArray;}
@property (nonatomic, strong) IBOutlet UITableView *tableViewIndustry;
然后在ViewController.m中,viewDidLoad:

 [industry setTitle:industryText forState:UIControlStateNormal];
这些是我认为最重要的部分。

是类型“推”的序列吗?如果是这样,您应该尝试使用以下方法解除表视图控制器:

[self.navigationController popViewControllerAnimated:YES];
如果segue为“Modal”类型,则应在表视图控制器上执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // your logic here
    [self dismissModalViewControllerAnimated:YES];
}
至于控制器之间的数据交换,我个人会在Table View控制器的头文件中创建一个公共属性,如下所示:

@property (nonatomic, weak) <Your_UIViewController_Subclass_Here> *mainController
@属性(非原子,弱)*主控制器
然后,在主控制器中,重写prepareForSegue:sender:方法以将新创建的属性设置为指向主控制器,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   <Your_Subclass_Of_UITableViewController_Here> *destinationController = segue.destinationController;
   destinationController.mainController = self;
}
-(void)prepareforsgue:(UIStoryboardSegue*)分段发送方:(id)发送方
{
*destinationController=segue.destinationController;
destinationController.mainController=self;
}
现在,Table View控制器将有一个指向主控制器的指针来发送数据,基本上,您所要做的就是在主控制器中实现一些公共方法或属性,当用户在Table View控制器中选择一个Table View行以更新textfields中的文本或任何数据模型时,将调用这些方法或属性使用。

是“推”类型的序列吗?如果是这样,您应该尝试使用以下方法解除表视图控制器:

[self.navigationController popViewControllerAnimated:YES];
如果segue为“Modal”类型,则应在表视图控制器上执行以下操作:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // your logic here
    [self dismissModalViewControllerAnimated:YES];
}
至于控制器之间的数据交换,我个人会在Table View控制器的头文件中创建一个公共属性,如下所示:

@property (nonatomic, weak) <Your_UIViewController_Subclass_Here> *mainController
@属性(非原子,弱)*主控制器
然后,在主控制器中,重写prepareForSegue:sender:方法以将新创建的属性设置为指向主控制器,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
   <Your_Subclass_Of_UITableViewController_Here> *destinationController = segue.destinationController;
   destinationController.mainController = self;
}
-(void)prepareforsgue:(UIStoryboardSegue*)分段发送方:(id)发送方
{
*destinationController=segue.destinationController;
destinationController.mainController=self;
}


现在,Table View控制器将有一个指向主控制器的指针来发送数据,基本上,您所要做的就是在主控制器中实现一些公共方法或属性,当用户在Table View控制器中选择一个Table View行以更新textfields中的文本或任何数据模型时,将调用这些方法或属性使用。

请发布您的代码。您使用的是哪种序列?”模态'?完成,如果您需要更多,请告诉我。@MikePalard:我尝试了多种解决方案,目前它的模态/popover。
prepareforsgue:
可以多次调用吗?如果是,您应该移动您的行:`NSIndexPath*indexPath=[self.tableViewIndustry indexPathForSelectedRow];ViewController*destViewController=segue.destinationViewController;`进入
viewdiload
,因此将只调用一次。请发布您的代码。您使用的是哪种序列?”模态'?完成,如果您需要更多,请告诉我。@MikePalard:我尝试了多种解决方案,目前它的模态/popover。
prepareforsgue:
可以多次调用吗?如果是,您应该移动您的行:`NSIndexPath*indexPath=[self.tableViewIndustry indexPathForSelectedRow];ViewController*destViewController=segue.destinationViewController;`进入
viewdiload
,因此它将只被调用1次。对于推送序列,如果我没有弄错,您需要使用导航控制器,而我没有使用导航控制器。因此,segue的类型为“modal”/“popover”。如果我使用带有推式分段的导航控制器,它会工作吗?是的,如果在执行分段时嵌入导航控制器,则会保留上一个控制器的实例,因此当您弹出已分段的视图控制器时,您会得到触发分段的同一个控制器。我认为,即使在模态上,你也应该能够做你想做的事情,但我几乎总是使用推序列。好的,让我知道!当然,当你弹出被控制的控制器时,你应该找到一种方法将数据从推送的视图控制器传递给上一个视图控制器,如果你还没有做过的话,我已经编写了这个代码,问题是SigUE推动了我的主控制器的一个新的实例,希望它能工作!刚刚用一个可能的解决方案更新了答案,使用模态segue对于推送segue,如果我没有弄错,你需要使用导航控制器,而我没有使用导航控制器。因此,segue的类型为“modal”/“popover”。如果我使用带推式分段的导航控制器,它会工作吗?是的,如果在执行分段时嵌入导航控制器中,则会保留前一个控制器的实例,因此当y