gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:13:17 25 4
gpt4 key购买 nike

我在 Stackoverflow 上看到过很多类似的问题,我尝试了很多东西,但我似乎无法弄清楚。我有多个 TableViewController 和 1 个 MainViewController。 MainViewController 具有调用不同 TableViewControllers 的按钮,并且在选择 tablecell 时 tableViewController 关闭。

问题是,每次我从我的任一 tableViewController 推送时,我都会推送一个新的 MainViewController 实例。我目前使用 Segues 在这些不同的 Controller 之间推送。

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

我很确定我必须使用其中之一:

[self dismissModalViewController: withCompletion:]
performSegue
prepareForSegue

或者在类中设置一些全局变量并调用它们,但我还没有足够的经验来正确实现它。

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

希望我足够清楚,如果需要可以发布示例代码。

编辑,发布代码(记住,转场是在 Storyboard 中执行的): TableView 示例.h:

@interface IndustryViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

NSArray *tableViewArray;}
@property (nonatomic, strong) IBOutlet UITableView *tableViewIndustry;

TableViewExample.m:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showIndustry"]) {
NSIndexPath *indexPath = [self.tableViewIndustry indexPathForSelectedRow];
ViewController *destViewController = segue.destinationViewController;
destViewController.industryText = [tableViewArray objectAtIndex:indexPath.row];
destViewController.industryTextName = [tableViewArray objectAtIndex:indexPath.row];
}}

然后在ViewController.m中,viewDidLoad:

 [industry setTitle:industryText forState:UIControlStateNormal];

这些是我认为最重要的部分。

最佳答案

segue 是“Push”类型的吗?如果是这样,您应该尝试使用以下方法关闭 TableView Controller :

[self.navigationController popViewControllerAnimated:YES];

如果 segue 是“Modal”类型,你应该在你的 TableView Controller 上做这样的事情:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// your logic here
[self dismissModalViewControllerAnimated:YES];
}

至于 Controller 之间的数据交换,我个人会做的是在 TableView Controller 的头文件中创建一个公共(public)属性,如下所示:

@property (nonatomic, weak) <Your_UIViewController_Subclass_Here> *mainController

然后,在主 Controller 中,覆盖 prepareForSegue:sender: 方法以将新创建​​的属性设置为指向主 Controller ,如下所示:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
<Your_Subclass_Of_UITableViewController_Here> *destinationController = segue.destinationController;
destinationController.mainController = self;
}

现在 Table View Controller 将有一个指向主 Controller 的指针来发送数据,基本上您所要做的就是在主 Controller 中实现一些公共(public)方法或属性,以便在用户选择 table view 行时调用 TableView Controller ,以便更新文本字段中的文本或您正在使用的任何数据模型。

关于iphone - Xcode/Obj-c - Segue 推送新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16605815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com