我如何从ViewDidload调用按钮的方法



我有10个 UIButton对象。我为所有人定义了一个动作。当我在相关按钮上时,我想将UIScrollView动画为所需的图像位置。我已经使用故事板实施了这个项目,并且有一种用于所有10个按钮的方法。我像这样的viewDidLoad中的CC_3中的每个按钮给了标签

button1.tag = 10;
button1.tag = 11;
button1.tag = 12;
button1.tag = 13;
button1.tag = 14;
button1.tag = 15;
button1.tag = 16;
button1.tag = 17;
button1.tag = 18;
button1.tag = 19;

//viewcontroller.m文件

-(IBAction) Button1:(id) sender
{
 [self performSegueWithIdentifier:@"nextView" sender:sender];
}

此按钮方法将带我去NextViewController及其工作正常,但是在nextviewctontroller.m文件中,我想为UIScrollView动画到所需的位置。我在nextviewcontroller.m文件中这样做,但它不起作用。

viewDidload
{
if ([sender tag] == 10)
{
[yourScrollView scrollRectToVisible:CGRectMake(0,0,100,100) animated:YES];
}
else if ([sender tag] == 11)
{
[yourScrollView scrollRectToVisible:CGRectMake(320,0,100,100) animated:YES];
}
/*
.
.
.
.
.
.
.
and its continue to the last tag 
*/
}

它不会使UIScrollView动画到所需的位置,并且在这里记住一件事,我将sender称为标题文件中的id。当我单击相应的按钮时,请告诉我如何将UIScrollView动画为所需的位置。我还想说我没有从Xcode项目中复制并粘贴此代码。我写了这个代码,只给您我想要什么。

此时,您在第二个ViewController中,不再可以访问按钮上的标签。除非您有提及第一个视图控制器(您不应该),否则它们不在那时。

您应该在" NextViewController"上创建标签或偏移属性。然后,根据您从第一个视图控制器到达那里的方式,您需要将第一个视图控制器设置为第二个属性。然后,您可以在第二次访问它。如果您使用的是SEGUE,则应在第一个视图控制器的Preparforsegue方法中执行此操作。

如果要在导航控制器上推动它,则在分配第二个视图控制器并将其推入导航堆栈之前,将设置该属性。

在下一个视图控制器的标题中添加此

@property (nonatomic, strong) UIButton *buttonBeingPassedIn;

在第一个视图控制器中,您需要在全球创建UIBUTTON,以便您可以以该文件中的任何方法访问它,将其称为:ButtonThatWastapped。然后,您可以做这样的事情:

-(IBAction) Button1:(id) sender
{
    buttonBeingPassedIn = (UIButton *)sender;
    // Notice this has been changed to sender: self
    [self performSegueWithIdentifier:@"nextView" sender:self];
}

在第一个视图控制器中,您需要添加此方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
      nextViewController *vc = (nextViewController *)segue.destinationViewController;
      vc.buttonBeingPassedIn = buttonThatWasTapped;
}

然后您将能够做

viewDidload
{
    if (buttonBeingPassedIn == 10)
}

尝试在ViewWillAppear而不是ViewDidload中执行此操作。您不应将与几何相关的内容放在ViewDidload中,因为该点的几何(帧等)在此点未设置。

最新更新