ios - 通过使用各种视图控制器和 UIView 后继数组执行 segue
问题描述
好的,所以这个可能有点难以解释。
我正在尝试在目标 c 中制作一个应用程序,它位于第一个屏幕上,您可以在描述页面的图片之间滑动,但实际上并不是页面。当您单击图片时,您会转到图片显示的相关页面。
我使用了一个非常好的 youtube 教程来使用带有 ScrollView 和 PageControl 的幻灯片选项。
根据本教程,您创建了一个新类,UIView 的继任者,名为“Slide”,带有 h.、m。和 xib 文件。在您的 MainViewController 中,您有一个“幻灯片”数组,您可以在幻灯片之间交换。
这是数组的创建:
- (NSArray*)createSlides{
NSArray *arr;
Slide *slide1 = (Slide*)[[NSBundle mainBundle] loadNibNamed:@"Slide" owner:self options:nil].firstObject;
slide1.label.text = @"Slide1";
[slide1.button setBackgroundImage:[UIImage imageNamed:@"scratch"] forState: UIControlStateNormal];
Slide *slide2 = (Slide*)[[NSBundle mainBundle] loadNibNamed:@"Slide" owner:self options:nil].firstObject;
slide2.label.text = @"Slide2";
[slide2.button setBackgroundImage:[UIImage imageNamed:@"expose"] forState: UIControlStateNormal];
arr = [NSArray arrayWithObjects: slide1, slide2, nil];
return arr;
}
比在另一个函数中我使用这个:
for (int i = 0; i<slides.count; ++i) {
slides[i].frame = CGRectMake(width * (CGFloat)i, 0, width, height);
[_slideScrollView addSubview:slides[i]];
}
(这还不是全部,但我不确定代码的其他部分是否与我的问题相关。)。
到目前为止,一切都很好。它完美地工作。
现在,我想添加点击图片并执行segue到相关视图控制器的功能。例如,我有 slide2 的“ExposeViewController”。问题是我单击“幻灯片”上的图片,但我从 MainViewController 执行 segue。
起初,我尝试在 Slide 类上制作 UIButton(显示相关图片)并创建一个按钮操作,以某种方式检测 Slide 的(UIView 的)ViewController,以某种方式将 segue 标识符的名称传递给它,而不是在视图的方法中传递控制器执行segue。
它没有用,我不喜欢这个解决方案。
经过几个小时的研究,我仍然不确定如何制作它。如何让用户按下它的视图控制器中作为 UIView (Slide) 执行方法的一部分的按钮以转到另一个视图控制器?
解决方案
只需像这样为每个按钮提供不同的标签。
Slide1.button.tag = 1
Slide2.button.tag = 2
然后为每个按钮添加相同的自定义操作,例如
[Slide1.button addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside];
[Slide2.button addTarget:self action:@selector(functionName:) forControlEvents:UIControlEventTouchUpInside];
现在我们像这样手动创建选择器函数-
-(void) functionName:(UIButton*) sender{
If (sender.tag == 1){
[self performSegueWithIdentifier:@"//firstIdentifier" sender:self]; }
else If (sender.tag == 2) {
[self performSegueWithIdentifier:@"//secondIdentifier" sender:self]; }
}
您需要检查发件人按钮的特定标签并相应地执行操作。
推荐阅读
- rxjs - RXJS:订阅共享运算符会导致奇怪的行为
- pandas - Pandas - 将带逗号的行转换为数据框中的多行
- android - Google 游戏服务 - 签名证书指纹 (SHA1)。调试密钥库始终无效
- kotlin - 无法使用 init 块来初始化属性
- c++ - 如何在 Windows 10 中更改铃声(“\a”)
- reactjs - 测试时,导致 React 状态更新的代码应该被封装到 act 中
- wordpress - wp-admin中的Macos nginx php 7.3 wordpress错误
- apache-kafka - 如何在没有 Kafka Connect 接收器的情况下将数据从 Kafka 获取到存储中?
- angular - Ionic 4 响应式网格
- python - 如何解决显示错误路径的操作系统错误