0

我有 10 个UIButton对象。我为所有这些定义了一个动作。UIScrollView当我在相关按钮上时,我想将动画设置到所需的图像位置。我已经使用情节提要实现了这个项目,并且我对所有 10 个按钮都有一种方法。我给文件中的每个按钮一个标签,viewDidLoadviewcontroller.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 项目中复制和粘贴这段代码。我写这段代码只是让你知道我想要什么。

4

3 回答 3

1

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

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

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

于 2012-12-20T18:59:53.677 回答
0

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

@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)
}
于 2012-12-20T19:57:23.157 回答
-1

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

于 2012-12-20T18:55:50.897 回答