我是 Objective-C 的新手,有一个问题。多次搜索,但我找不到我要找的东西。
我正在为这个应用程序使用 Storyboard。在主屏幕上,您有一些带有标签的按钮。这些标签应该说明一个数字。按下按钮时,您将转到一个新的 viewController,您已在其中输入(在“保存”之后)返回主屏幕并使用正确的数字更新标签。 一个按钮的所有功能都很棒,我对此感到非常高兴。
问题是:
1. 因为我有多个带有标签的按钮,所以我想使用同一个 viewController 来一遍又一遍地提供输入。我尝试连接每个按钮以在标识符“AddData”下滑动到 viewController,但 Xcode 不允许在 Storyboard 中使用相同的标识符两次或更多。所以我需要别的东西。有什么想法吗?
2.目前我使用以下代码将数据带回主屏幕:
homeScreenViewController
- (IBAction)unwindToHomeScreenUIStoryboardSegue *)segue;
{
inputDataViewController *source = [segue sourceViewController];
self.logoOneLabel.text = source.endTotalNumber;
}
输入数据 View Controller :
- (void)prepareForSegueUIStoryboardSegue *)segue senderid)sender
{
if (sender != self.saveButton) {
return;
} else {
if (endTotalLabelNumber > 0) {
self.endTotalNumber = [NSString stringWithFormat"%.0f", totalLabelNumber + endTotalLabelNumber];
} else if (endTotalLabelNumber == 0 && totalLabelNumber == 0){
self.endTotalNumber = 0;
} else {
self.endTotalNumber = [NSString stringWithFormat"%.0f", totalLabelNumber + endTotalLabelNumber];
}
}
}
这对一个按钮很有效,但是如何与多个按钮一起使用呢?我听说 Delegates 多次使用同一个 viewController 并将数据返回到不同的地方,但我就是不明白。有什么帮助吗?
Best Answer-推荐答案 strong>
你不应该需要委托(delegate)。
您需要的是 View Controller 上处理输入的属性,它知道它正在为哪个按钮处理输入。
当您转到输入 Controller 时,根据按下的按钮设置此属性。当您放松时,获取此属性以了解要修改的标签。
例如,在输入 View Controller 的 .h 文件中,添加如下属性:
@property (nonatomic,assign) NSInteger handlingTag;
或者什么,任何对你有意义的名字。
现在您需要实现主屏幕 View Controller 的 prepareForSegue:sender: 。
使用 sender 参数来确定按下了哪个按钮,并在此基础上根据按钮设置输入 View Controller 的新 handlingTag 属性当我们放松时会知道如何处理它。
现在在 unwind 方法中:
switch (source.handlingTag)
根据源的handlingTag 属性创建一个开关结构,并根据这个值设置合适的标签。
正如 Jeff 在评论中指出的那样,在这里定义一个 NS_ENUM 用于属性而不是 NSInteger 是一个非常好的主意。 NS_ENUM 将允许您命名正在使用的值。
关于ios - 多次使用同一个 View Controller ,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/23979917/
|