0

私は10個UIButtonのオブジェクトを持っています。それらすべてに対して単一のアクションを定義します。UIScrollView関連するボタンを押したときに、目的の画像の場所にアニメーションを付けたいです。ストーリーボードを使用してこのプロジェクトを実装しました。10 個のボタンすべてに対して 1 つのメソッドがあります。このようなファイルの 各ボタン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宣言したことを覚えておいてください。対応するボタンをクリックしたときに、目的の場所にアニメーション化する方法を教えてください。また、このコードを xcode プロジェクトからコピー アンド ペーストしたわけではありません。私はこのコードを書きました。senderidUIScrollView

4

3 に答える 3

1

この時点で、2 つ目の viewController が表示され、ボタンのタグにアクセスできなくなります。最初のView Controllerへの参照がない限り、それらはその時点で範囲外です(すべきではありません)。

「nextViewController」にタグまたはオフセット プロパティを作成する必要があります。次に、最初のビュー コントローラーからそこに到達する方法に応じて、最初のビュー コントローラーで 2 番目のビュー コントローラーにそのプロパティを設定する必要があります。その後、2番目にアクセスできます。セグエを使用している場合は、最初のビュー コントローラーの prepareForSegue メソッドでこれを行う必要があります。

ナビゲーション コントローラーにプッシュする場合は、2 番目のビュー コントローラーを割り当てた後、ナビゲーション スタックにプッシュする前に、そのプロパティを設定します。

于 2012-12-20T18:59:53.677 に答える
0

次のView Controllerのヘッダーにこれを追加します

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

最初のView Controllerでは、このメソッドを追加する必要があります

- (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

viewDidLoad の代わりに viewWillAppear でこれを試してください。ビューのジオメトリ(フレームなど)がその時点で設定されていないため、ジオメトリ関連のものをviewDidLoadに入れるべきではありません。

于 2012-12-20T18:55:50.897 に答える