Ios 多次使用同一视图控制器
我不熟悉Objective-C,有个问题。搜索了好几次,但我找不到我要找的东西 我正在使用此应用程序的情节提要。在主屏幕上有一些按钮,上面有标签。这些标签应该显示一个数字。当按下按钮时,您将进入一个新的viewController,在那里输入的内容(在“保存”之后)将返回到主屏幕,并用正确的数字更新标签。所有这些对于一个按钮来说都非常有效,我对此感到非常高兴 问题是: 1。由于我有多个带标签的按钮,我想使用同一个viewController反复输入。我尝试将每个按钮连接到标识符“AddData”下的viewController,但Xcode不允许在情节提要中使用相同的标识符两次或更多次。所以我需要一些别的东西。有什么想法吗 2.目前,我使用以下代码将数据带回主屏幕: HomeScreenView控制器Ios 多次使用同一视图控制器,ios,objective-c,uistoryboardsegue,Ios,Objective C,Uistoryboardsegue,我不熟悉Objective-C,有个问题。搜索了好几次,但我找不到我要找的东西 我正在使用此应用程序的情节提要。在主屏幕上有一些按钮,上面有标签。这些标签应该显示一个数字。当按下按钮时,您将进入一个新的viewController,在那里输入的内容(在“保存”之后)将返回到主屏幕,并用正确的数字更新标签。所有这些对于一个按钮来说都非常有效,我对此感到非常高兴 问题是: 1。由于我有多个带标签的按钮,我想使用同一个viewController反复输入。我尝试将每个按钮连接到标识符“AddData”
- (IBAction)unwindToHomeScreen:(UIStoryboardSegue *)segue;
{
inputDataViewController *source = [segue sourceViewController];
self.logoOneLabel.text = source.endTotalNumber;
}
inputDataViewController:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)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];
}
}
}
这对于一个按钮非常有效,但是如何将其用于多个按钮呢?我听说学员多次使用同一个viewController并将数据返回到不同的位置,但我就是不明白。有什么帮助吗?您不需要代表 您需要的是视图控制器上的一个属性,该属性处理对它的输入,并知道它为哪个按钮处理输入 切换到输入控制器时,根据按下的按钮设置此属性。回退时,获取此属性以了解要修改的标签 例如,在输入视图控制器的
.h
文件中,添加如下属性:
@property (nonatomic,assign) NSInteger handlingTag;
或者别的什么,随便你叫什么名字都行
现在您需要实现主屏幕视图控制器的prepareforsgue:sender:
使用sender
参数确定按下了哪个按钮,并在此基础上,根据按钮设置input view控制器的新handlingTag
属性,以便您知道在我们松开按钮时如何处理它
现在在展开方法中:
switch (source.handlingTag)
基于源的handlingTag
属性创建开关结构,并基于此值设置适当的标签
正如Jeff在评论中指出的,在这里为属性定义一个
NS_ENUM
,而不是一个NSInteger
,这将是一个非常好的主意。NS_ENUM
允许您命名正在使用的值。您不需要委托
您需要的是视图控制器上的一个属性,该属性处理对它的输入,并知道它为哪个按钮处理输入
切换到输入控制器时,根据按下的按钮设置此属性。回退时,获取此属性以了解要修改的标签
例如,在输入视图控制器的.h
文件中,添加如下属性:
@property (nonatomic,assign) NSInteger handlingTag;
或者别的什么,随便你叫什么名字都行
现在您需要实现主屏幕视图控制器的prepareforsgue:sender:
使用sender
参数确定按下了哪个按钮,并在此基础上,根据按钮设置input view控制器的新handlingTag
属性,以便您知道在我们松开按钮时如何处理它
现在在展开方法中:
switch (source.handlingTag)
基于源的handlingTag
属性创建开关结构,并基于此值设置适当的标签
正如Jeff在评论中指出的,在这里为属性定义一个
NS_ENUM
,而不是一个NSInteger
,这将是一个非常好的主意。NS_ENUM
允许您命名正在使用的值。有几种不同的方法来实现您所需要的。但我认为最常见的是代表。
以下是inputDataViewController的外观:
#import <UIKit/UIKit.h>
@protocol inputDataDelegate;
@interface inputDataViewController : UIViewController
@property (weak) id<inputDataDelegate> delegate;
@property (strong, nonatomic) NSNumber *buttonTag;
@end
@protocol inputDataDelegate <NSObject>
-(void) inputDataViewControllerDismissed:(id)data;
@end
在homeScreenViewController连接代理中的下一步:
@interface homeScreenViewController : UIViewController<inputDataDelegate>
此外,最重要的是,不要忘记将self发送给我们的代表:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"inputDataController"])
{
inputDataViewController *inputCtrl = [segue destinationViewController];
inputCtrl.delegate = self;
inputCtrl.buttonTag = sender.tag
}
}
有几种不同的方法来实现您所需要的。但我认为最常见的是代表。 以下是inputDataViewController的外观:
#import <UIKit/UIKit.h>
@protocol inputDataDelegate;
@interface inputDataViewController : UIViewController
@property (weak) id<inputDataDelegate> delegate;
@property (strong, nonatomic) NSNumber *buttonTag;
@end
@protocol inputDataDelegate <NSObject>
-(void) inputDataViewControllerDismissed:(id)data;
@end
在homeScreenViewController连接代理中的下一步:
@interface homeScreenViewController : UIViewController<inputDataDelegate>
此外,最重要的是,不要忘记将self发送给我们的代表:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"inputDataController"])
{
inputDataViewController *inputCtrl = [segue destinationViewController];
inputCtrl.delegate = self;
inputCtrl.buttonTag = sender.tag
}
}
也许值得编辑一个NS_枚举来定义每种类型的输入,而不是一个模棱两可的NSInteger。好吧,我现在就在尝试。但是如何让inputDataViewController中的每个按钮滑动?在故事板中,我仍然被卡住了,因为它们只允许一个相同的名称标识符…你可以有多个片段到同一个目标场景,但它们必须有不同的标识符。只需设置一个从每个按钮到目标场景的segue,并适当设置segue标识符。如果在移动到目标视图之前进行任何处理,则可能需要在prepareForSegue中说明不同的标识符。它们都可以具有相同的segue标识符。如果从视图控制器而不是按钮钩住segue,则可以通过编程方式调用segue,并将按下的按钮用作发送方参数。可能值得编辑以提及NS_枚举,以定义每种类型的输入,而不是不明确的NSInteger。好的,我现在正在尝试。但是如何让inputDataViewController中的每个按钮滑动?在故事板中,我仍然被卡住了,因为它们只允许一个相同的名称标识符…你可以有多个片段到同一个目标场景,但它们必须有不同的标识符。只需设置一个从每个按钮到目标场景的segue,并适当设置segue标识符。如果在移动到目标视图c之前进行任何处理,则可能需要在prepareForSegue中说明不同的标识符