- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
好的,基本上我有一个主视图 Controller - 我的应用程序的主菜单。我有一个按钮可以将用户带到表格 View ,他们可以在其中选择需要应用于主视图的内容。问题是,我不知道有什么方法可以判断主视图 Controller 是从 segue 还是从应用程序开始创建的。有没有办法检查这个?我应该只为 viewDidLoad 方法设置一个 bool 值或字符串来检查,然后在 prepareForSegue 中修改它吗?
最佳答案
所以现在我更好地了解了您的需求,我可以给您一个更彻底的答案。您真正需要的是与委托(delegate)和协议(protocol)相关的模式。这是一种在 viewController 之间发送数据的方式,无需知道有关父(或委托(delegate)) Controller 的任何真实细节。这就是您想要做的。
同样为了清晰起见,我将为您的 Controller 使用两个名称,mainViewController
用于您的根 Controller ,tableViewController
用于您的 UITableViewController 子类的实例。
在.h
中。在您的 tableViewController
中,您需要设置一个协议(protocol):
@protocol SingleSelectionDelegate
- (void)selectionHasBeenChosenWithOption:(NSString *)selection;
@end
@interface MyTableViewControllerSubclass : UITableViewController
// properties and method declarations
// this is your property you will use to send data back to your delegate (in this case your mainViewController)
@property (weak, nonatomic) id<SingleSelectionDelegate> selectionDelegate;
@end
然后在 mainViewController
的 .m
(或 .h
)中,您需要添加:
// this imports the interface and also the protocol that you want
#import "MyTableViewControllerSubclass.h"
// the <Single...> part says you conform to this protocol and implement the methods it requires (in this case selectionHasBeenChosenWithOption:)
@interface MainViewController <SingleSelectionDelegate>
@end
@implementation MainViewController
// here is where you need to implement the required method
- (void)selectionHasBeenChosenWithOption:(NSString *)selection {
// do what you want with the selection, assign it to a property, call other methods, pass it to other delegates, or whatever else.
// now that you have your information you want the focus to come back to you so you
[self.navigationController popToViewController:self animated:YES]; // works even if not the root
}
// you also need to set yourself as tableViewController's selectionDelegate, if you are using Storyboards you will do this in the prepareForSegue.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.destinationViewController isKindOfClass:[MyTableViewControllerSubclass class]]) {
// you could also check a specific segue's identifier but this makes sense because if it is this subclass then it will have a selectionDelegate property
// assign yourself as the delegate
MyTableViewControllerSubclass *destination = (MyTableViewControllerSubclass *)segue.destinationViewController
destination.selectionDelegate = self;
}
@end
然后最后一步是在您有 selectionDelegate 的信息时调用委托(delegate)方法。这是在您的 tableViewController
的 .m
中完成的。在这种情况下,我将在 tableView:didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// getting the data you want to send back
NSString dataToSendBack = [self.myArray[indexPath.row] description];
// sending the data to your delegate (in this case mainViewController)
[self.selectionDelegate selectionHasBeenChosenWithOption:dataToSendBack];
// mainViewController is handling the popping so we do not need to do anything with the navigation stack
}
这基本上就是您所追求的。我在此处的文本编辑器中输入了几乎所有这些内容,因此可能存在一些语法错误。让我知道,我可以修复它们。这是 iOS 开发的一个重要概念,因为你最终会在所有地方使用它。学好它,你也可以找一些其他的教程。就像我说的,你会发现很多!我记得当我第一次学习它时,我感到不知所措,但现在它只是我的第二天性。
关于ios - 查看已加载 : Checking if from a segue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353984/
我一整天都遇到同样的错误,我知道这是在说 Storyboard 中没有识别出 segue,但确实如此。以下是我认为相关的代码:1.为 segue 发出信号的按钮的 IBAction。 -(IBActi
我有一个从 A View Controller 到 B View Controller 的 unwind segue。 在B中做了一个网络操作,操作完成后,响应会显示在A View Controlle
我正在创建一个应用程序,家长可以在其中登录并查看有关其本地托儿中心的信息。但是,为登录运行 View Controller 的代码无法正常工作。一旦用户按下登录按钮,我希望我的代码使用标识符“Show
刚刚遇到一个奇怪的问题。我有一个启动画面,它自动使用自定义 segue (fade-to-segue) 转到主页 ViewController。自定义 segue 工作正常,但一旦实现,我在主页上的其
以编程方式创建的 segue 在 performSegueWithIdentifier: 上使应用程序崩溃,不过我真的不想使用 Storyboard。 - (void)viewDidLoad { [s
我想我一定在这里遗漏了一些简单的东西,但我不知道它是什么。 我必须支持来自同一个 View Controller 的多个 segue,所以我很自然地想使用 segue 标识符。我的代码由于某种原因无法
当用户在警告时点击“确定”按钮时,我如何才能将用户带到自定义 View Controller ? 我有一个主 Controller -> 导航 Controller -> 第二个 View Contr
在 TableView Controller 中,我试图获取在我继续之前选择的行的索引(最终将传递此信息以准备继续)。我已经实现了这个功能: var selectedQuestionCell: Ind
我正在 Xamarin Studio 中开发一个应用程序(所以它是 C#),它有一个包含多个 TextField 的表单,我想在 segue 之前验证整个屏幕> 到下一个屏幕执行。单击按钮时,它正在使
我有一个带有标识符的 segue。 当我按下函数 shouldPerformSegueWithIdentifier 中的按钮时,我得到一个空标识符 什么会导致这样的问题?我设置错了什么? 这是我的代码
我有一个奇怪的问题。我在 Storyboard中创建了 2 个 View Controller :testSegueViewcontroller 和 nextPageViewController。 t
我下面的代码试图将一个值从 twoviewcontroller 转移到 View Controller 。 segue 正在工作,我可以从 View Controller 转到 View Contro
我正在尝试使用自定义segue,当单击按钮时,它会使 View 向右或向左“滚动”。我添加了一个如下所示的自定义类 class horizontalSegue : UIStoryboardSegue
我有一个带有 Root View Controller 的 UINavigationController。我的 UINavigationController 也设置为我的应用程序的 Initial V
您好,我正在尝试使用 prepare for segue 方法执行一个 segue。我在关注这个问题 this但我无法成功注册。当我单击注册按钮时,它所做的只是注册用户并停在那里。我从 View Co
当 Storyboard上有一个按钮连接退出时,我了解如何使用展开转场。但是在我的应用程序中,我使用推送转场从 TableViewController 转到 ViewController。所以我的导航
我要实现的目标的背景: MainViewController 呈现 TableVC。我将点击一个单元格以显示 DetailVC。能够通过 TableVC 或 DetailVC 上导航栏上的 doneB
在我的 Storyboard中,模态转场将用户带到登录屏幕(从主屏幕)。然后,我从注册屏幕添加了一个 PUSH segue 到下一个屏幕(创建配置文件),该屏幕嵌入在导航 Controller 中(创
我有大约 6 个 segue 在 prepareForSegue 方法中执行相同的操作,但是,我想为我的 unwind segue 跳过此操作,但我无法弄清楚如何确定传递的 segue 是 unwin
因此,我开始在XCode 4.3.2中使用 Storyboard 。我从Master-Detail应用程序(iPad的拆分 View 应用程序)开始。在详细信息 View (名为DetailVC)中,
我是一名优秀的程序员,十分优秀!