2016-03-31 6 views
2

ViewControllerTwoからViewControllerOneに戻りたいと思っています。私はそのことを担当するボタンを作成しましたが、私の問題は、ボタンがViewControllerTwoに追加されたカスタムUIViewクラスの一部であり、ボタンがViewControllerTwoのメインビューの一部ではないということです。カスタムUIView内でビューコントローラを別のビューコントローラに戻す方法を教えてください。

だから、カスタムUIViewクラスで、私はボタンがクリックされた場合に反応する方法を持っている...

-(void)buttonClicked{ 
    [SecondViewController performSegueWithIdentifier: "ShowFirstViewController" sender:nil]; 
} 

私はこれを行うと、私はエラーを取得:作る「performSegueWithIdentifierないクラスのメソッドを」センス。

どのようにして、segueの原因となるボタンが実際にView Controllerの一部ではなく、別のクラスにある2つのViewController間を分割できますか。

+0

私はあなたの質問にもっと詳しく述べる必要があると思います。それぞれの 'ViewController'クラスは独自の' UIView'を持っていますので、View Controllerの1つにカスタム 'UIView'があるとはどういう意味ですか?あなたはコントローラの1つに属する 'UIView'として' UIView'のサブクラスがあることを意味しますか?ヘッダーファイルを含めること、何を委任するか、どのプロトコルを遵守しているかを示すことができます。 –

+0

さて、私はuiviewをサブクラス化し、コントローラのuiviewに追加しました。 –

+0

さて、あなたはそれが動作するように見えます!よくやった。 –

答えて

1

SecondViewControllerに代理コールを返信し、SecondViewControllerの代理コールバックメソッドでperformSegueWithIdentifierを実装すると思います。

それはこのように書きます:

カスタムUIViewクラスインターフェイス上この

@protocol CustomViewDelegate <NSObject> 
- (void)buttonDidTap; 
@end 

などのプロトコルを作成する次に、あなたのインターフェイスにカスタムで

@property (nonatomic, weak) id <CustomViewDelegate> delegate; 

をプロパティを作成するUIView * .mこれを追加する

-(void)buttonClicked{ 
    [self.delegate buttonDidTap]; 
} 

ビューコントローラの.mファイル内でこのメソッドを実装して、あなたのviewDidLoadMethod

このような
-(void)viewDidLoad{ 
[super viewDidLoad]; 
self.yourCustomView.delegate = self; 
} 

にデリゲートを設定し、この

@interface SecondViewController: UIViewController <CustomViewDelegate> 

のようなあなたのSecondViewControllerにプロトコルを準拠

- (void)buttonDidTap{ 
[self.performSegueWithIdentifier: "ShowFirstViewController" sender:self]; 
} 

I迅速な男の私はこれがうまくいくはずだと思う。

+0

書くことができるコードを少し混乱させているので、例を表示することができます –

+0

ここで私の答えを編集しました。 –

+0

あなたの気持ちは変わりません。ただ一つの問題。私はプロパティを宣言することはできません: "デリゲート"。私は "自動プロパティ合成はプロパティ"代理 "を合成しません、そのスーパークラスによって実装され、意思を確認するために@dynamicを使用します" –

0

のiOS 9.3、Xcodeの7.3は、ARCは、これは私がトラブルシューティングするであろうことである

有効:

ステップ1:はあなたがビューのための適切なストーリーボード識別子を持っていることを確認しますコントローラーあなたは間に繋ぎたい。ビューは、ビューコントローラにカスタムで接続するかどうかを指定するだけです。

これを行うには、「* .storyboard」にアクセスしてユーティリティ(右ペイン)を表示し、アイデンティティインスペクタに移動します。 「ShowFirstViewController」がStoryboard IDフィールドに入力されていることを確認してください。

enter image description here

関連する問題