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

时间:2012-12-20 18:51:41

标签: iphone objective-c ios

我有10个UIButton个对象。我为所有人定义了一个动作。当我在相关按钮上时,我想将UIScrollView设置为所需图像位置的动画。我使用故事板实现了这个项目,我有一个方法可以处理所有10个按钮。我为viewDidLoad文件中的viewcontroller.m中的每个按钮添加了一个标记,如下所示

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项目中复制和粘贴这段代码。我写了这段代码,只是让你知道我想要什么。

3 个答案:

答案 0 :(得分:1)

此时,您处于第二个viewController中,无法再访问按钮上的标记。除非你引用了第一个视图控制器(你不应该这样做),否则它们超出了范围。

您应该在“nextViewController”上创建标记或偏移属性。然后,根据您从第一个视图控制器到达的方式,您需要让第一个视图控制器在第二个视图控制器上设置该属性。然后你可以在第二个访问它。如果您正在使用segue,则应在第一个视图控制器的prepareForSegue方法中执行此操作。

如果您在导航控制器上推送它,您可以在分配第二个视图控制器之后并在将其推送到导航堆栈之前设置该属性。

答案 1 :(得分:0)

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

@property (nonatomic, strong) UIButton *buttonBeingPassedIn;

在第一个View控制器中,您想要全局创建一个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)
}

答案 2 :(得分:-1)

尝试在viewWillAppear而不是viewDidLoad中执行此操作。您不应该在viewDidLoad中放置与几何相关的东西,因为此时未设置视图的几何(框架等)。