Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在自定义UIView中从一个视图控制器切换回另一个视图控制器?_Ios_Objective C_Uiview_Segue - Fatal编程技术网

Ios 如何在自定义UIView中从一个视图控制器切换回另一个视图控制器?

Ios 如何在自定义UIView中从一个视图控制器切换回另一个视图控制器?,ios,objective-c,uiview,segue,Ios,Objective C,Uiview,Segue,我想从ViewControllerTwo切换回ViewControllerOne。我创建了一个负责执行此操作的按钮,但我的问题是该按钮是添加到ViewControllerTwo的自定义UIView类的一部分,该按钮不是ViewControllerTwo主视图的一部分 因此,在自定义UIView类中,我有一个方法,该方法在单击按钮时会作出反应 -(void)buttonClicked{ [SecondViewController performSegueWithIdentifier: "S

我想从ViewControllerTwo切换回ViewControllerOne。我创建了一个负责执行此操作的按钮,但我的问题是该按钮是添加到ViewControllerTwo的自定义UIView类的一部分,该按钮不是ViewControllerTwo主视图的一部分

因此,在自定义UIView类中,我有一个方法,该方法在单击按钮时会作出反应

-(void)buttonClicked{
    [SecondViewController performSegueWithIdentifier: "ShowFirstViewController" sender:nil];
 }
当我这样做时,我得到一个错误:“performsguewithidentifier不是类的方法”,这是有意义的


因此,如果负责segue的按钮实际上不是任何一个视图控制器的一部分,并且位于不同的类中,那么如何在两个视图控制器之间进行切换呢

我认为您可以让一个代理回调到您的
SecondViewController
,并在
SecondViewController
中的代理回调方法中实现
performsguewithidentifier

事情是这样的:

在自定义UIView类接口上方创建如下协议

@protocol CustomViewDelegate <NSObject>
- (void)buttonDidTap;
@end
@interface SecondViewController: UIViewController <CustomViewDelegate>
将协议与您的
SecondViewController
一致,如下所示

@protocol CustomViewDelegate <NSObject>
- (void)buttonDidTap;
@end
@interface SecondViewController: UIViewController <CustomViewDelegate>
在view controller.m文件中实现此方法

- (void)buttonDidTap{
[self.performSegueWithIdentifier: "ShowFirstViewController" sender:self];
}

我是一个更敏捷的人,我认为这应该可以很好地工作。

iOS 9.3,Xcode 7.3,ARC启用

这就是我要做的故障排除:

第1步:确保要在其中切换的视图控制器具有正确的情节提要标识符。视图只需附加到视图控制器(自定义或非自定义)

要执行此操作,请转到“*.storyboard”显示实用程序(右窗格)并导航到Identity Inspector。确保在情节提要ID字段中输入了“ShowFirstViewController”


你能给我举个例子吗?我对要写的代码有点困惑。我刚刚编辑了我的答案,你可以看一下。好的,谢谢。只有一个问题。我不能声明属性:“委托”。我收到一条警告:“自动属性合成不会合成属性”委托“它将由其超类实现,使用@dynamic来确认意图”使用此属性而不是弱属性:@property(\uuu safe\u unretained)id delegate;我认为你需要详细说明你的问题。每个
ViewController
类都有自己的
UIView
,那么当您说其中一个视图控制器有一个自定义的
UIView
时,您是什么意思?您的意思是说您有一个子类
UIView
作为属于其中一个控制器的
UIView
?你可能想包括你的头文件,向我们展示什么委托什么,以及他们遵守什么协议。是的,我对uiview进行了子类化,并将其添加到控制器的uiview中。没错,看起来你让它工作了!干得好。
- (void)buttonDidTap{
[self.performSegueWithIdentifier: "ShowFirstViewController" sender:self];
}