3

ストーリーボードを使用しており、動的ボタンをロードするビューがあります。このボタンをクリックすると、2 番目のビュー コントローラーを読み込み、データも渡す必要があります。セグエを動的ボタンとして使用できません。

次のコードを使用して、2番目のView Controllerをロードします

UIStoryboard*  sb1 = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
                                                           bundle:nil];
UIViewController* vc1 = [sb1 instantiateViewControllerWithIdentifier:@"SecondViewController"];


[self.navigationController pushViewController:vc1 animated:YES];

2番目のView Controllerでは、1番目のView Controllerから約5つのフィールドにアクセスする必要があります。データを渡すにはどうすればよいですか?

4

7 に答える 7

1

そのようなことを試してください:

クラスA

// CLASS_A.h
#import <UIKit/UIKit.h>
@interface CLASS_A : UIViewController {
    ...
}
- (IBAction)Btn_PushPressed:(id)sender;
...
@end

// CLASS_A.m
#import "CLASS_A.h"
#import "CLASS_B.h"
@implementation CLASS_A

- (IBAction)Btn_PushPressed:(id)sender
{
    UIStoryboard*  sb1 = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
                                                       bundle:nil];
    CLASS_B* vc1 = [sb1 instantiateViewControllerWithIdentifier:@"SecondViewController"];
    vc1.delegate = self;
    [self.navigationController pushViewController:vc1 animated:TRUE];
}

....
@end

クラスB

// CLASS_B.h
#import <UIKit/UIKit.h>
@class CLASS_A;
@interface CLASS_B : UIViewController {
    ...
}
@property (weak, nonatomic) CLASS_A *delegate;
....
@end

// CLASS_B.m
#import "CLASS_B.h"
#import "CLASS_A.h"
@implementation CLASS_B
....
@end
于 2013-03-07T11:38:54.913 に答える
1

ボタンにバインドされていないセグエを作成するには、Ctrl キーを押しながら最初のコントローラーから 2 番目のコントローラーにドラッグします (このセグエと識別子を指定することを忘れないでください)。

ボタンの IBAction (Interface Builder または 経由で設定addTarget:self action:forControlEvents:) で、[self performSegueWithIdentifier:@"YourSegueIdentifier" sender:button];

通常どおり、2 番目のコントローラーにデータを渡すことができます。- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

于 2013-03-07T12:13:06.233 に答える
1

これはSwift 2.0でそれを行う方法です。を使用する代わりにprepareForSegue

スイフト3.0

let someViewConroller = self.storyboard?.instantiateViewController(withIdentifier: "SomeViewController") as! SomeViewController
someViewConroller.someObject = self.someObject!
self.navigationController?.pushViewController(someViewConroller, animated: true)

スイフト2.0

let someViewConroller = self.storyboard?.instantiateViewControllerWithIdentifier("SomeViewController") as! SomeViewController
someViewConroller.someObject = self.someObject!
self.navigationController?.pushViewController(someViewConroller, animated: true)
于 2015-11-29T13:21:20.260 に答える
0

まず、動的ボタンがある場合でもsegueを使用できます。ターゲットメソッドをUIButtonに追加し、そのメソッドでsegueを使用してViewControllerをプッシュするだけです。2番目のViewControllerで、2番目のView Controllerをプッシュする前に、いくつかのプロパティを取得し、それらのプロパティに値を割り当てます。お気に入り:

UIStoryboard*  sb1 = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone"
                                               bundle:nil];
UIViewController* vc2 = [sb1 instantiateViewControllerWithIdentifier:@"SecondViewController"];

[vc2 setName:@"name"];
[self.navigationController pushViewController:vc2 animated:YES];

その前に、SecondViewControllerのNSString*nameにプロパティを割り当てる必要があります

于 2013-03-07T11:42:13.623 に答える