首页 > 解决方案 > 通过使用各种视图控制器和 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) 执行方法的一部分的按钮以转到另一个视图控制器?

标签: iosobjective-ciphoneuiviewcontroller

解决方案


只需像这样为每个按钮提供不同的标签。

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]; }
}

您需要检查发件人按钮的特定标签并相应地执行操作。


推荐阅读